На главную

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 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);
прерывание;
}
}



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