Обработка пользовательского ввода
При запуске программы Switch текст в нижней части меню подсказывает, какие клавиши управляют работой приложения. Клавиши со стрелками изменяют текущий выделенный видеорежим, клавиша
Enter активизирует его (если он не является текущим), а клавиша
Escape завершает работу программы. Все эти клавиши обрабатываются функцией
OnKeyDown(), создаваемой ClassWizard. Ее код приведен в листинге 4.5.
Листинг 4.5. Функция SwitchWin::OnKeyDown()
void SwitchWin::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: PostMessage( WM_CLOSE ); break; case VK_UP: newindex=selectmode-1; if (newindex>=0) { selectmode=newindex; UpdateMenuSurface(); } break; case VK_DOWN: newindex=selectmode+1; if (newindex<nmodes) { selectmode=newindex; UpdateMenuSurface(); } break; case VK_LEFT: newindex=selectmode-rows; if (newindex>=0) { selectmode=newindex; UpdateMenuSurface(); } break; case VK_RIGHT: newindex=selectmode+rows; if (newindex<nmodes) { selectmode=newindex; UpdateMenuSurface(); } break; case VK_RETURN: if (selectmode != GetCurDisplayMode()) { ActivateDisplayMode( selectmode ); x=y=0; } break; case 'S': SaveSurface( primsurf, "switch.bmp" ); break; case 'M': SaveSurface( menusurf, "menusurf.bmp" ); break; case 'F': SaveSurface( fpssurf, "fpssurf.bmp" ); break; case 'T': SaveSurface( bmpsurf, "trisurf.bmp" ); break; default: DirectDrawWin::OnKeyDown(nChar, nRepCnt, nFlags); } }
|
Обработка нажатых клавиш происходит в различных секциях оператора
switch. Клавиша
Escape (код виртуальной клавиши
VK_ESCAPE) приводит к посылке сообщения
WM_CLOSE и последующему завершению приложения. При нажатии клавиш со стрелками изменяется индекс текущего видеорежима и вызывается функция
UpdateMenuSurface(), которая перерисовывает
menusurf в соответствии с произведенными изменениями. При нажатии клавиши
Enter (
VK_RETURN) вызывается функция
ActivateDisplayMode(), которой в качестве аргумента передается индекс режима (при условии, что выбран видеорежим, отличный от текущего). Все остальные клавиши, нажатые пользователем, обрабатываются функцией
OnKeyDown() базового класса.
Содержание Назад Вперед