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



Графический вывод



Давайте посмотрим, как в программе SuperSwitch реализована функция DrawScene(). Она похожа на одноименную функцию из программы Switch, за исключением того, что при выборе видеорежима новая версия должна отображать поверхность со списком частот. Функция DrawScene() выглядит так:


void SuperSwitchWin::DrawScene() { ClearSurface( backsurf, 0 );

BltSurface( backsurf, bmpsurf, x, y );

x+=xinc; y+=yinc;

const CRect& displayrect=GetDisplayRect(); if (x<-160 || x>displayrect.right-160) { xinc=-xinc; x+=xinc; } if (y<-100 || y>displayrect.bottom-100) { yinc=-yinc; y+=yinc; }

backsurf->BltFast( 0, 0, modemenusurf, 0, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );

if (ratemenu_up) { DWORD w,h; GetSurfaceDimensions( ratemenusurf, w, h ); backsurf->BltFast( (320-w)/2, (200-h)/2, ratemenusurf, 0, DDBLTFAST_WAIT ); }

UpdateFPSSurface(); if (displayfps) { int x=displayrect.right-fpsrect.right; int y=displayrect.bottom-fpsrect.bottom; backsurf->BltFast( x, y, fpssurf, &fpsrect, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT ); }

primsurf->Flip( 0, DDFLIP_WAIT ); }


Код, отображающий меню частот, расположен внутри кода меню видеорежимов (потому что меню частот выводится поверх меню видеорежимов). Присутствие меню частот определяется состоянием флага ratemenu_up. При выводе поверхность меню частот выравнивается по центру поверхности меню видеорежимов.




Содержание  Назад  Вперед