Стэн Трухильо - Графика для Windows средствами DirectDraw

Здесь есть возможность читать онлайн «Стэн Трухильо - Графика для Windows средствами DirectDraw» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика для Windows средствами DirectDraw: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика для Windows средствами DirectDraw»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика для Windows средствами DirectDraw — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика для Windows средствами DirectDraw», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

int hdrlen=strlen(headertext);

ClearSurface(menusurf, 0);

HDC hdc;

menusurf->GetDC(&hdc);

SelectObject(hdc, largefont);

SetBkMode(hdc, TRANSPARENT);

SetTextColor(hdc, textshadow);

TextOut(hdc, 1, 1, headertext, hdrlen);

SetTextColor(hdc, textcolor);

TextOut(hdc, 0, 0, headertext, hdrlen);

SelectObject(hdc, smallfont);

int nmodes=GetNumDisplayModes();

if (nmodes>maxmodes) nmodes=maxmodes;

int rows=nmodes/menucols;

if (nmodes%menucols) rows++;

for (int i=0; i

int x=(i/rows)*colwidth+2;

int y=(i%rows)*rowheight+reservedspace;

DWORD w,h,d;

GetDisplayModeDimensions(i, w, h, d);

len=sprintf(buf, "%dx%dx%d", w, h, d);

SetTextColor(hdc, textshadow);

TextOut(hdc, x+1, y+1, buf, len);

if (i==selectmode) SetTextColor(hdc, brighttextcolor);

else SetTextColor(hdc, textcolor);

TextOut(hdc, x, y, buf, len);

}

len=sprintf(buf, "[Arrows] [Enter] [Escape]");

SetTextColor(hdc, textshadow);

TextOut(hdc, 3, 186, buf, len);

SetTextColor(hdc, textcolor);

TextOut(hdc, 2, 185, buf, len);

menusurf->ReleaseDC(hdc);

return TRUE;

}

Функция UpdateMenuSurface()вызывает ClearSurface()и передает ей в качестве аргументов указатель menusurfи 0. В результате все пиксели поверхности обнуляются. Так как ноль является цветовым ключом для данной поверхности, вся поверхность становится прозрачной.

Теперь все готово к выводу текста. Обратите внимание на функцию SetBkMode(), которая указывает, что текст должен выводиться в прозрачном режиме. Это значит, что функция TextOut()будет выводить только сам текст, без фона, благодаря чему наш прозрачный фон останется в неприкосновенности. Цвет текста задается функцией Win32 SetTextColor(). В этой программе используются три цвета: первый — для обычного текста, второй — для затененного текста, и третий — для текста, выделенного подсветкой. Каждая текстовая строка выводится дважды — сначала затемненным, а потом обычным цветом; затененный текст смещен на один пиксель по отношению к обычному. После завершения вывода текста вызывается функция ReleaseDC()интерфейса DirectDrawSurface.

Инициализация приложения завершается вызовом функции CreateFPSSurface(), которая создает поверхность для вывода FPS. Она выглядит так:

BOOL SwitchWin::CreateFPSSurface() {

static const char dummystr[]="000 FPS";

HDC hdc = ::GetDC(0);

SelectObject(hdc, smallfont);

SIZE size;

GetTextExtentPoint(hdc, dummystr, strlen(dummystr), &size);

::ReleaseDC(0, hdc);

fpsrect.left=0;

fpsrect.top=0;

fpsrect.right=size.cx+1;

fpsrect.bottom=size.cy+1;

fpssurf=CreateSurface(fpsrect.right, fpsrect.bottom);

DDCOLORKEY ddck;

ddck.dwColorSpaceLowValue = 0;

ddck.dwColorSpaceHighValue = 0;

fpssurf->SetColorKey(DDCKEY_SRCBLT, &ddck);

framecount=0;

displayfps=FALSE;

return TRUE;

}

Работа CreateFPSSurface()начинается с определения размера поверхности функцией GetTextExtentPoint(). Фиктивная строка (с текстом, который занимает максимальную возможную площадь) передается в качестве аргумента функции GetTextExtentPoint(), вычисляющей размеры области (в пикселях) для вывода заданного текста. По размерам, полученным от GetTextExtentPoint(), мы определяем размеры поверхности, добавляя один пиксель для смещения тени. Такой подход отличается от использованного в функции CreateMenuSurface(), потому что этот код автоматически регулирует размеры поверхности при изменении размера шрифта. Поверхность меню, напротив, обладает фиксированными размерами, не зависящими от размера шрифта.

По аналогии с menusurfмы обеспечиваем прозрачность, назначая поверхности нулевой цветовой ключ (с помощью функции SetColorKey()интерфейса DirectDrawSurface). Наконец, переменная framecount(предназначенная для подсчета кадров за текущий интервал хронометража) обнуляется, а логической переменной displayfpsприсваивается значение FALSE, согласно которому поверхность FPS пока не должна отображаться на экране.

Хотя мы создали поверхность fpssurf, она осталась неинициализированной. В отличие от поверхности menusurf, инициализируемой функцией UpdateMenuSurface(), мы пока не можем инициализировать поверхность FPS, потому что у нас еще нет выводимого значения. Приложение только что было запущено (или только что перешло в другой видеорежим), так что вывод любого значения FPS был бы необоснованным.

К этому моменту инициализация программы Switch завершается. Наши поверхности (три вспомогательные, плюс первичная поверхность со вторичным буфером) были созданы и подготовлены к работе. Давайте посмотрим, как они отображаются на экране.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика для Windows средствами DirectDraw»

Представляем Вашему вниманию похожие книги на «Графика для Windows средствами DirectDraw» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика для Windows средствами DirectDraw»

Обсуждение, отзывы о книге «Графика для Windows средствами DirectDraw» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x