Графика для Windows средствами DirectDraw


Инициализация приложения - часть 4


br>Функция 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(), вычисляющей размеры области (в пикселях) для вывода заданного текста.


Начало  Назад  Вперед



Книжный магазин