Вход/Регистрация
Графика для Windows средствами DirectDraw
вернуться

Трухильо Стэн

Шрифт:

 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. При выводе поверхность меню частот выравнивается по центру поверхности меню видеорежимов. 

Обработка пользовательского ввода 

Теперь в программу необходимо включить код для обработки пользовательского ввода при работе с меню частот. Мы воспользуемся функцией OnKeyDown (листинг 4.7).

Листинг 4.7. Функция SuperSwitch::OnKeyDown

void SuperSwitchWin::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {

 int newindex;

 int nmodes=GetNumDisplayModes;

 if (nmodes>maxmodes) nmodes=maxmodes;

 int rows=nmodes/menucols;

 if (nmodes%menucols) rows++;

 switch (nChar) {

 case VK_ESCAPE:

if (!include_refresh || !ratemenu_up) {

PostMessage(WM_CLOSE);

break;

}

if (ratemenu_up) {

ratemenu_up=FALSE;

if (ratemenusurf) ratemenusurf->Release, ratemenusurf=0;

}

break;

 case VK_UP:

if (include_refresh && ratemenu_up) {

if (selectrate>0) {

selectrate--;

UpdateRateMenuSurface;

}

} else {

newindex=selectmode-1;

if (newindex>=0) {

selectmode=newindex;

UpdateModeMenuSurface;

}

}

break;

 case VK_DOWN:

if (include_refresh && ratemenu_up) {

if (selectrate<numrates-1) {

selectrate++;

UpdateRateMenuSurface;

}

} else {

newindex=selectmode+1;

if (newindex>nmodes) {

selectmode=newindex;

UpdateModeMenuSurface;

}

}

break;

 case VK_LEFT:

if (include_refresh && ratemenu_up) break;

newindex=selectmode-rows;

if (newindex>=0) {

selectmode=newindex;

UpdateModeMenuSurface;

}

break;

 case VK_RIGHT:

if (include_refresh && ratemenu_up) break;

newindex=selectmode+rows;

if (newindex<nmodes) {

selectmode=newindex;

UpdateModeMenuSurface;

}

break;

 case VK_RETURN:

if (include_refresh) {

if (ratemenu_up) {

int rate=refresh_rates[selectmode][selectrate];

ActivateDisplayMode(selectmode, rate);

x=y=0;

ratemenu_up=FALSE;

} else {

CreateRateMenuSurface;

UpdateRateMenuSurface;

  • Читать дальше
  • 1
  • ...
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: