Отправляет email-рассылки с помощью сервиса Sendsay

Windows API

  Все выпуски  

Windows API


Информационный Канал Subscribe.Ru

Windows API. Уроки с сайта http://progs.biz

Рассылка №7

Windows API. Урок 7. Сообщение WM_TIMER.
Windows API. Урок 8. Программа с двумя таймерами.

Полные версии уроков (с картинками) можно найти по адресам:
Урок 7. Сообщение WM_TIMER.
Урок 8. Программа с двумя таймерами.

Д. Чепмен Освой самостоятельно Visual C++.NET за 21 день.

Заказать на Озоне

Подробнее

Рассылки сайта progs.biz через subscribe.ru
Уроки по ассемблеру
Уроки по ассемблеру. Использование MASM, примеры, FAQ.

Windows API. Урок 7. Сообщение WM_TIMER

Сообщение WM_TIMER отправляется таймером и имеет следующие дополнительные параметры:

wParam - идентификатор таймера, отправившего сообщение WM_TIMER (второй параметр функции SetTimer). Именно с помощью wParam вы можете определить, что что за таймер послал сообщение (а таймеров в программе может быть несколько).

lParam - это указатель на CALLBACK-функцию, которая обработывает сообщение WM_TIMER. Такая функция будет выполняться, если при создании таймера функцикй SetTimer ее четвертый параметр отличен от NULL - в него мы как раз и записываем указатель на эту функцию.

Наверх

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.

Наверх

Copyright Алексеев Игорь, 2003
Copyright сайт progs.biz, 2003
Распространение материалов без разрешения владельцев авторских прав запрещено.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное