|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Using Cursor Functions to Create a Mousetrap
The following example uses the SetCursorPos, GetCursorPos, CreateCursor, LoadCursor, and SetCursor functions to create a simple mousetrap. It also uses cursor and timer functions to monitor the cursor's position every 10 seconds. If the cursor position has not changed in the last 10 seconds and the application's main window is minimized, the application changes the cursor and moves it to the mousetrap icon.
An example for a similar mousetrap is included in Icons. It uses the LoadCursor and LoadIcon functions instead of the more device-dependent CreateCursor and CreateIcon functions.
HICON hIcon1; // icon handles POINT ptOld; // previous cursor location HCURSOR hCurs1; // cursor handle // The following cursor bitmasks are defined in a code // example that appears earlier in this topic. // Yin cursor AND and XOR bitmasks BYTE ANDmaskCursor[] = ... BYTE XORmaskCursor[] = ... // Yang icon AND bitmask BYTE ANDmaskIcon[] = {0xFF, 0xFF, 0xFF, 0xFF, // line 1 0xFF, 0xFF, 0xC3, 0xFF, // line 2
0xFF, 0xFF, 0x00, 0xFF, // line 3 0xFF, 0xFE, 0x00, 0x7F, // line 4 0xFF, 0xFC, 0x00, 0x1F, // line 5 0xFF, 0xF8, 0x00, 0x0F, // line 6 0xFF, 0xF8, 0x00, 0x0F, // line 7 0xFF, 0xF0, 0x00, 0x07, // line 8 0xFF, 0xF0, 0x00, 0x03, // line 9 0xFF, 0xE0, 0x00, 0x03, // line 10
0xFF, 0xE0, 0x00, 0x01, // line 11 0xFF, 0xE0, 0x00, 0x01, // line 12 0xFF, 0xF0, 0x00, 0x01, // line 13 0xFF, 0xF0, 0x00, 0x00, // line 14 0xFF, 0xF8, 0x00, 0x00, // line 15 0xFF, 0xFC, 0x00, 0x00, // line 16 0xFF, 0xFF, 0x00, 0x00, // line 17 0xFF, 0xFF, 0x80, 0x00, // line 18
0xFF, 0xFF, 0xE0, 0x00, // line 19 0xFF, 0xFF, 0xE0, 0x01, // line 20 0xFF, 0xFF, 0xF0, 0x01, // line 21 0xFF, 0xFF, 0xF0, 0x01, // line 22 0xFF, 0xFF, 0xF0, 0x03, // line 23 0xFF, 0xFF, 0xE0, 0x03, // line 24 0xFF, 0xFF, 0xE0, 0x07, // line 25 0xFF, 0xFF, 0xC0, 0x0F, // line 26
0xFF, 0xFF, 0xC0, 0x0F, // line 27 0xFF, 0xFF, 0x80, 0x1F, // line 28 0xFF, 0xFF, 0x00, 0x7F, // line 29 0xFF, 0xFC, 0x00, 0xFF, // line 30 0xFF, 0xF8, 0x03, 0xFF, // line 31 0xFF, 0xFC, 0x3F, 0xFF}; // line 32 // Yang icon XOR bitmask BYTE XORmaskIcon[] = {0x00, 0x00, 0x00, 0x00, // line 1 0x00, 0x00, 0x00, 0x00, // line 2
0x00, 0x00, 0x00, 0x00, // line 3 0x00, 0x00, 0x00, 0x00, // line 4 0x00, 0x00, 0x00, 0x00, // line 5 0x00, 0x00, 0x00, 0x00, // line 6 0x00, 0x00, 0x00, 0x00, // line 7 0x00, 0x00, 0x38, 0x00, // line 8 0x00, 0x00, 0x7C, 0x00, // line 9 0x00, 0x00, 0x7C, 0x00, // line 10
0x00, 0x00, 0x7C, 0x00, // line 11 0x00, 0x00, 0x38, 0x00, // line 12 0x00, 0x00, 0x00, 0x00, // line 13 0x00, 0x00, 0x00, 0x00, // line 14 0x00, 0x00, 0x00, 0x00, // line 15 0x00, 0x00, 0x00, 0x00, // line 16 0x00, 0x00, 0x00, 0x00, // line 17 0x00, 0x00, 0x00, 0x00, // line 18
0x00, 0x00, 0x00, 0x00, // line 19 0x00, 0x00, 0x00, 0x00, // line 20 0x00, 0x00, 0x00, 0x00, // line 21 0x00, 0x00, 0x00, 0x00, // line 22 0x00, 0x00, 0x00, 0x00, // line 23 0x00, 0x00, 0x00, 0x00, // line 24 0x00, 0x00, 0x00, 0x00, // line 25 0x00, 0x00, 0x00, 0x00, // line 26
0x00, 0x00, 0x00, 0x00, // line 27 0x00, 0x00, 0x00, 0x00, // line 28 0x00, 0x00, 0x00, 0x00, // line 29 0x00, 0x00, 0x00, 0x00, // line 30 0x00, 0x00, 0x00, 0x00, // line 31 0x00, 0x00, 0x00, 0x00}; // line 32 hIcon1 = CreateIcon(hinst, // handle of app instance 32, // icon width 32, // icon height
1, // number of XOR planes 1, // number of bits per pixel ANDmaskIcon, // AND bitmask XORmaskIcon); // XOR bitmask hCurs1 = CreateCursor(hinst, // handle of app instance 19, // horizontal position of hot spot 2, // vertical position of hot spot 32, // cursor width 32, // cursor height ANDmaskCursor, // AND bitmask
XORmaskCursor); // XOR bitmask // Fill in the window class structure. WNDCLASS wc; wc.hIcon = hIcon1; // class icon wc.hCursor = LoadCursor(NULL, IDC_ARROW); // class cursor // // Register the window class and perform // other application initialization. // // Set a timer for the mousetrap. GetCursorPos(&ptOld); SetTimer(hwnd, IDT_CURSOR, 10000, (TIMERPROC) NULL); LONG APIENTRY MainWndProc(
HWND hwnd, // window handle 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; // iconized window location switch (message) { // // Process other messages. //
case WM_TIMER:
// If the window is minimized, compare the // current cursor position with the one 10 // seconds before. 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 + 20, rc.top + 4);
// Note that the additional constants // (20 and 4) are application-specific // values to align the yin-shaped cursor // and the yang-shaped icon. } else { ptOld.x = pt.x; ptOld.y = pt.y; } } return 0; case WM_SETCURSOR: // If the window is minimized, draw hCurs1.
// If the window is not minimized, draw the // default cursor (class cursor). if (IsIconic(hwnd)) { SetCursor(hCurs1); break; } case WM_DESTROY: // Destroy timer. KillTimer(hwnd, IDT_CURSOR); PostQuitMessage(0); break; } }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Использование Курсора Функционирует, чтобы Создавать Мышеловку
Следующий пример использует SetCursorPos, GetCursorPos, CreateCursor, LoadCursor, и функции SetCursor, чтобы создавать простую мышеловку. Это также использует курсор и таймерные функции, чтобы проверять позиции курсора каждые 10 секунд. Если позиция курсора не изменилась бы в течение последних 10 секунд и прикладное основное окно минимизировано, приложение изменяет курсор и перемещает это на икону мышеловки.
Пример для аналогичной мышеловки включен на Иконы. Это использует LoadCursor и функции LoadIcon вместо более устройство-зависимых CreateCursor и функций CreateIcon.
HICON hIcon1; // икона оперирует ТОЧКУ ptOld; // предшествующая позиция курсора HCURSOR hCurs1; // ручка курсора // Следующий курсор bitmasks определен в коде // пример, который появляется раньше в этой теме. // Курсор Инь (женское начало) И и bitmasks XOR БАЙТ ANDmaskCursor[] =... БАЙТ XORmaskCursor[] =... tance 32, // иконная ширина 32, // иконная высота
1, // число XOR планирует 1, // количество битов за пиксель ANDmaskIcon, // И bitmask XORmaskIcon); // XOR bitmask hCurs1 = CreateCursor(hinst, // ручка кв.;инф)прил. примера 19, // горизонтальная позиция горячей точки 2, // вертикальная позиция горячей точки 32, // ширина курсора 32, // высота курсора ANDmaskCursor, // И bitmask
XORmaskCursor); // XOR bitmask // Заполните структуру класса окна. wc WNDCLASS; wc.hIcon = hIcon1; // икона класса wc.hCursor = LoadCursor(НЕДЕЙСТВИТЕЛЬНАЯ, IDC_ARROW); // курсор класса // // Зарегистрируйте класс окна и выполняйте // другую прикладную инициализацию. // // Установленный таймер для мышеловки. GetCursorPos(&ptOld); SetTimer(hwnd, IDT_CURSOR, 10000, (TIMERPROC) НЕДЕЙСТВИТЕЛЬНЫЙ); ДОЛГО (ДЛИНОЙ) 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 + 20, rc.top + 4);
// Отметьте, что дополнительные константы // (20 и 4), - специализированные // величины, чтобы выравнивать сформированный курсор / инь (женское начало)/ и сформированная иконка яна (мужское начало). } еще { ptOld.x = pt.x; ptOld.y = pt.y; } } возврат 0; случай WM_SETCURSOR: // Если окно минимизировано, сделано hCurs1.
// Если окно не минимизировано, сделайте // нарушать обязательства курсор (курсор класса). если (IsIconic(hwnd)) { SetCursor(hCurs1); прерывание; } случай WM_DESTROY: // Уничтожать таймер. KillTimer(hwnd, IDT_CURSOR); PostQuitMessage(0); прерывание; } }
|
|
|
|
| |