Использование Таймеров Страница 2.
|
Страница 2 из 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; } } } |