}
break:
case GRAPHICS:
//Пуск и останов движения колеса сводится к созданию и уничтожению //таймера 1. {
static int TimerOn-0: //Первоначально здесь ноль, поэтому первый выбор //пункта Graphics запустит движение. При втором выборе того же пункта //движение остановится.
if(TimerOn) {TimerOn - 0; KillTimerC hWnd. 1 ):}
else {TimerOn - 1; SetTimer(hWnd.1.40.NULL);}
}
break
case ID_DEM0: //При выборе пункта Обучение устанавливается Demo-3: //признак работы в режиме обучения и вызывается меню Work DefWi ndowProc (hWnd. WMJYSCOMMAND. SC_KEYMENU.1W'): break;
}
}
Модуль WndPoc.cpp содержит оконную процедуру, как это показано в листинге 5.14.
Листинг 5.14
#include <windows.h> #include "Main.h"
LRESULT API ENTRY InputWndProc (HWND hWnd.UINT message.
WPARAM wParam.LPARAM lParam)
{
switch (message) {
case WM_DESTROY:
KillTimerC hWnd. 1 );
PostQuitMessage(O): break:
case WM_COMMAND: //Приходит при выборе терминального пункта меню.
OnMeniKhWnd. message. wParam. lParam):
//Команда меню указана в младшем слове wParam. break: Л case WMJNTERIDLE:
if(Demo) OnEnterIdle(hWnd.wParam.lParam); break:
case WMJCEYUP:
PrintInt(hWnd.l0.2."Kofl клавиши *x", wParam): Взаимодействие меню и приложения
//Вывод кода нажатой клавиши, break;
case WMJIZE:
GetCli entRect(hWnd.&rClient):
//Это сообщение приходит при изменении размера окна, и данная //функция обновляет содержание rClient. break;
case WMJIMER:
OnTimer(hWnd. message. wParam. IParam); break;
}
return DefWindowProc(hWnd.message.wParam.lParam); }
Основным отличием оконной процедуры от предыдущих проектов является явная обработка сообщения WM_ENTERIDLE. Сообщение приходит после того, как подменю будет отображено на экране. Если установлен режим обучения, то вызывается функция OnEnterldleChWnd. wParam. IParam).
Сообщения WM_TTMER порождаются таймерами. В приложении используется три таймера. Операторы создания первого таймера, тактирующего движение колеса, и второго таймера, отсчитывающего время индикации подсказки в текстовой области, показаны выше, в функции OnMenuO. Таймер 10 создается в функции OnEnterldleC) при отработке программы демонстрации, вызванной пунктом Обучение.