Использование Таймеров
Страница 2.


 

Следующий пример показывает как отследить мышку через callback-функцию MyTimerProc.

Пример:

UINT uResult;                                                                                                                                                                         // Значение, которое вернёт SetTimer
HICON hIcon1;                                                                                                                                                                         // хэндл иконки
POINT ptOld;                                                                                                                                                                                     // предыдущие координаты курсора
HINSTANCE hinstance;                                                                                     // хэндл текущего экземпляра
 
//
// инициализация приложения.
//

wc.hIcon = LoadIcon(hinstance, MAKEINTRESOURCE(400));
wc.hCursor = LoadCursor(hinstance, MAKEINTRESOURCE(200));

// Записываем текущие координаты курсора.

GetCursorPos(&ptOld);

// Устанавливаем таймер для отслеживания мышки.

uResult = SetTimer(hwnd,                                                             // хэндл главного окна
       IDT_MOUSETRAP,                                                                                                                                     // идентификатор таймера
       10000,                                                                                                                                                                                                                                     // интервал - 10 секунд
    (TIMERPROC) MyTimerProc); // процедура таймера

if (uResult == 0)
{
    ErrorHandler("No timer is available.");
}

LONG APIENTRY MainWndProc(
    HWND hwnd,                                                                                                             // хэндл главного окна
    UINT message,                                                                         // тип сообщения
    WPARAM  wParam,                                                 // дополнительная информация
    LPARAM   lParam)                                     // дополнительная информация
{

    HDC hdc;                                                                                                                                     // хэндл контекста устройства

    switch (message)
       {
                                     //
                                     // Обрабатываем другие сообщения.
                                     //

        case WM_DESTROY:
                                                                                     // Уничтожаем таймер.

            KillTimer(hwnd, IDT_MOUSETRAP);
                       PostQuitMessage(0);
                       break;

                                                                                     //
                                                                                     // Обрабатываем другие сообщения.
                                                                                     //

}
 
// MyTimerProc - callback-функция, которая обрабатывает
// сообщения WM_TIMER.
 
VOID CALLBACK MyTimerProc(
    HWND hwnd,                                                                                     // хэндл окна для сообщений таймера
    UINT message,                                                 // сообщение WM_TIMER
    UINT idTimer,                                                 // идентификатор таймера
    DWORD dwTime)                                                 // текущее системное время
{

    RECT rc;
    POINT pt;

                                     // Если окно минимизировано, то сравниваем текущие координаты
                                     // курсора с предыдущими. Если координаты не изменились, то
                                     // перемещаем курсор к иконке.

    if (IsIconic(hwnd))
       {
        GetCursorPos(&pt);

        if ((pt.x == ptOld.x) && (pt.y == ptOld.y))
               {
            GetWindowRect(hwnd, &rc);
            SetCursorPos(rc.left, rc.top);
               }
               else
               {
            ptOld.x = pt.x;
            ptOld.y = pt.y;
               }
       }
}

 

 
« Предыдущая статья   Следующая статья »