Функция 0nTimer(), которая обрабатывает сообщения WMJTIMER, находится в модуле OnTimer.cpp, код которого приведен в листинге 5.15.

Листинг 5.15

#include "Main.h"
#include "resource.h"
void RotateWheeKHDC hdc. int Erase);
void OnTimer(HWND hWnd.UINT message.WPARAM wParam.LPARAM IParam) {
HDCdc;
switch(wParam)

//Функция вызывается по сообщению WMJTIMER и записывает номер таймера //в переменную wParam. {

case 10: //Вызов остановки колеса KillTimerC hWnd. 10 );

PostMessageC hWnd.WM_SYSC0MMAND,SC_KEYMENU.'W'); break; case 2:

KillTimerC hWnd. 2 ); //От таймера 2 нужно получить однократное сообщение о том. что истекло //3 секунды с момента вывода подсказки. Поэтому таймер сразу же уничтожается, //а область подсказки стирается выводом прямоугольника, dc - GetDC(hWnd):

Rectanglе(dc.0.rCli ent.bottom-i Hei ght.rCli ent.ri ght.rCl i ent.bottom);

ReleaseDC(hWnd.dc); break; case 1:

//Каждое сообщение, поступившее от таймера 1. приводит к вызову функции

//рисования колеса RotateWheel() и выводу на экран следующей фазы

//динамического изображения. . л продолжение &

Создание и использование меню

Листинг 5.15 {продолжение)

de - GetDC(hWnd); RotateWheel (del); ReleaseDC(hWnd.dc);
}
}

Программа обучения реализована довольно просто. При выполнении команды Обучение функция ОпМепи() устанавливает режим обучения и вызывает подменю Work при помощи следующего фрагмента кода:

Demo-3;
DefWi ndowProc(hWnd.WMJYSCOMMAND.SC_KEYMENU.1W');

Вывод подменю порождает сообщение WM_ENTERIDLE и вызов функции OnEnterldl е(). Функция OnEnterldlе() запустит движение колеса и таймер 10, чтобы отсчитать заданное время движения. По истечении заданного интервала времени в оконную процедуру поступит сообщение WMJTIMER и функция 0nTimer() при обработке сигнала таймера 10 повторно вызовет подменю Work, но уже для остановки колеса.

Текст функции OnEnterldlе(), реализующей программу обучения, приведен в листинге 5.16.

Листинг 5.16

#include <windows.h> #include "Main.h" extern int Demo;
void OnEnterIdle(HWND hWnd.WPARAM wParam.LPARAM IParam) {

⇐ Предыдущая| |Следующая ⇒