Windows API Урок 8. Программа с двумя таймерами
Посмотрим, что мы должны сделать, чтобы наша программа совершала два независимых друг от друга периодических действия. Например, три раза в две секунды меняла заголовок окна, и раз в секунду издавала звуковой сигнал. Для этого мы должны обрабатывать сообщения от двух таймеров.
Меняем функцию WinMain:
...
//1-й таймер
SetTimer(hwnd, 1, 1000, NULL);
// 2-й таймер
SetTimer(hwnd, 2, 667, NULL);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
KillTimer(hwnd, 1);
KillTimer(hwnd, 2);
Тут мы завели второй таймер (с идентификатором 2). Для него интервал мы установили в 667 миллисекунд (чтобы он посылал WM_TIMER три раза в две секунды). В конце мы второй таймер убили.
Меняем оконную процедуру:
...
static bool b;
switch (msg){
case WM_TIMER:
if(wparam==1){
//Обрабатываем сообщение от первого таймера
MessageBeep(-1);
}
else{
//Обрабатываем сообщение от второго таймера
if(b){
SetWindowText(hwnd, "Title 1");
}
else{
SetWindowText(hwnd, "Title 2");
}
b=!b;
}
break;
...
Как вы видите, мы тут в обработчике для WM_TIMER анализируем параметр wParam. Именно в нем и передается идентификатор таймера. Если wParam равно 1, то это первый таймер (тикающий каждую секунду и издающий звуковой сигнал), в противном случае - второй (меняющий заголовок окна). Заголовок окна мы меняем API-функцией SetWindowText. Для этого мы используем статическую переменную b типа bool.
|