На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Using Timer Functions to Create a Mousetrap



Sometimes it is necessary to prevent more input while you have a cursor on the screen. One way to accomplish this is to create a special routine that traps mouse input until a specific event occurs. Many developers refer to this routine as "building a mousetrap."

The following example uses the SetTimer and KillTimer functions to create a simple mousetrap. SetTimer creates a timer that sends a WM_TIMER message every 10 seconds. Each time the application receives a WM_TIMER message, it records the cursor location. If the current location is the same as the previous location and the application's main window is minimized, the application moves the cursor to the icon. When the application closes, KillTimer stops the timer.

HICON hIcon1; // icon handle
POINT ptOld; // previous cursor location
UINT uResult; // SetTimer's return value
HINSTANCE hinstance; // handle of current instance

//
// Perform application initialization here.
//

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

// Record the initial cursor position.

GetCursorPos(&ptOld);

// Set the timer for the mousetrap.


uResult = SetTimer(hwnd, // handle of main window
IDT_MOUSETRAP, // timer identifier
10000, // 10-second interval
(TIMERPROC) NULL); // no timer callback

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

LONG APIENTRY MainWndProc(
HWND hwnd, // handle of main window
UINT message, // type of message
UINT wParam, // additional information

LONG lParam) // additional information
{

HDC hdc; // handle of device context
POINT pt; // current cursor location
RECT rc; // location of minimized window

switch (message)
{
//
// Process other messages.
//

case WM_TIMER:
// If the window is minimized, compare the current
// cursor position with the one from 10 seconds
// earlier. If the cursor position has not changed,

// move the cursor to the icon.

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;
}

}

return 0;

case WM_DESTROY:

// Destroy the timer.

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

//
// Process other messages.
//

}


Although the following example also creates a mousetrap, it processes the WM_TIMER message through the application-defined callback function MyTimerProc, rather than through the application's message queue.

UINT uResult; // SetTimer's return value
HICON hIcon1; // icon handle
POINT ptOld; // previous cursor location
HINSTANCE hinstance; // handle of current instance

//
// Perform application initialization here.
//

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

// Record the current cursor position.

GetCursorPos(&ptOld);

// Set the timer for the mousetrap.


uResult = SetTimer(hwnd, // handle of main window
IDT_MOUSETRAP, // timer identifier
10000, // 10-second interval
(TIMERPROC) MyTimerProc); // timer callback

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

LONG APIENTRY MainWndProc(
HWND hwnd, // handle of main window
UINT message, // type of message
UINT wParam, // additional information
LONG lParam) // additional information

{

HDC hdc; // handle of device context

switch (message)
{
//
// Process other messages.
//

case WM_DESTROY:
// Destroy the timer.

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

//
// Process other messages.
//

}

// MyTimerProc is an application-defined callback function that
// processes WM_TIMER messages.


VOID CALLBACK MyTimerProc(
HWND hwnd, // handle of window for timer messages
UINT message, // WM_TIMER message
UINT idTimer, // timer identifier
DWORD dwTime) // current system time
{

RECT rc;
POINT pt;

// If the window is minimized, compare the current
// cursor position with the one from 10 seconds earlier.
// If the cursor position has not changed, move the
// cursor to the icon.


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;
}
}
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Таймера Функционирует, чтобы Создавать Мышеловку



Иногда необходимо должно предохранить более вклад тогда как у вас есть курсор на экране. Один путь выполнять это должно создать специальную программу, которая перехватывает вклад мыши пока специфический случай не произойдет. Много разработчиков ссшлются на эту программу как "построение мышеловки."

Следующий пример использует SetTimer и функции KillTimer, чтобы создавать простую мышеловку. SetTimer СОЗДАЕТ таймер, который посылает сообщение WM_TIMER каждые 10 секунд. Всякий раз, когда приложение получает сообщение WM_TIMER, оно записывает позицию курсора. Если текущая позиция такая же как и предшествующая позиция и прикладное основное окно минимизировано, приложение перемещает курсор на икону. Когда приложение закрывает, KillTimer останавливает таймер.

HICON hIcon1; // иконная ТОЧКА ручки ptOld; // предшествующая позиция курсора UINT uResult; // ОБРАТНАЯ величина SetTimer's hinstance HINSTANCE; // ручка текущего примера

//
// Выполните прикладную инициализацию здесь.
//

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

// Запись начальная позиция курсора.

GetCursorPos(&ptOld);

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


uResult = SetTimer(hwnd, // Ручка основного окна IDT_MOUSETRAP, // таймерного идентификатора 10000, // 10- второй интервал (TIMERPROC) НЕДЕЙСТВИТЕЛЬНЫЙ); // никакой таймерный возврат

если (uResult == 0)
{
ErrorHandler(ТАЙМЕР "No доступен.");
}

ДОЛГО (ДЛИНОЙ) APIENTRY MainWndProc( HWND hwnd, // ручка основного сообщения окна UINT, // типа сообщения UINT wParam, // дополнительной информации

ДОЛГО (ДЛИНОЙ) lParam) // дополнительная информация
{

hdc HDC; // ручка контекстной ТОЧКИ устройства пт; // текущая позиция rc курсора RECT; // позиция минимизированного окна

ключ (сообщение)
{
//
// Процесс другие сообщения.
//

случай WM_TIMER:
// Если окно минимизировано, сравните течение // позиция курсора с один с 10 секунд // раньше. Если позиция курсора не изменилась бы,

// переместите курсор на иконку.

если (IsIconic(hwnd))
{
GetCursorPos(&pt);

если ((pt.x == ptOld.x) && (pt.y == ptOld.y))
{
GetWindowRect(hwnd, &rc);
SetCursorPos(rc.left, rc.top);
}
еще
{
ptOld.x = pt.x;
ptOld.y = pt.y;
}

}

возврат 0;

случай WM_DESTROY:

// Уничтожьте таймер.

KillTimer(hwnd, IDT_MOUSETRAP);
PostQuitMessage(0);
прерывание;

//
// Процесс другие сообщения.
//

}


Хотя следующий пример также создает мышеловку, он обрабатывает сообщение WM_TIMER через определенную прикладную функцию возврата MyTimerProc, а не через прикладную очередь сообщения.

UINT uResult; // ОБРАТНАЯ величина SetTimer's HICON hIcon1; // иконная ТОЧКА ручки 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); // таймерный возврат

если (uResult == 0)
{
ErrorHandler(ТАЙМЕР "No доступен.");
}

ДОЛГО (ДЛИНОЙ) APIENTRY MainWndProc( HWND hwnd, // ручка основного сообщения окна UINT, // тип сообщения UINT wParam, // дополнительная информация ДОЛГО (ДЛИНОЙ) lParam) // дополнительная информация

{

hdc HDC; // ручка контекста устройства

ключ (сообщение)
{
//
// Процесс другие сообщения.
//

случай WM_DESTROY: // Уничтожать таймер.

KillTimer(hwnd, IDT_MOUSETRAP);
PostQuitMessage(0);
прерывание;

//
// Процесс другие сообщения.
//

}

// MyTimerProc - определенная прикладная функция возврата эти // сообщения процессов WM_TIMER.


ПУСТОТА CALLBACK MyTimerProc(
HWND hwnd, // РУЧКА окна для таймерного сообщения сообщений UINT, // сообщения WM_TIMER UINT idTimer, // таймерного идентификатора DWORD dwTime) // текущее системное время
{

rc RECT;
ТОЧКА пт;

// Если окно минимизировано, сравните течение // позиция курсора с один с 10 секунд раньше.
// Если позиция курсора не изменилась бы, переместите // курсор на иконку.


если (IsIconic(hwnd))
{
GetCursorPos(&pt);

если ((pt.x == ptOld.x) && (pt.y == ptOld.y))
{
GetWindowRect(hwnd, &rc);
SetCursorPos(rc.left, rc.top);
}
еще
{
ptOld.x = pt.x;
ptOld.y = pt.y;
}
}
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz