Win32 API. Курсоры
Страница 9. Отображение курсора


Отображение курсора

Windows автоматически отображает курсор класса (курсор, связанный с окном, в котором он указывает). Вы можете назначать курсор класса при регистрации класса окна. Следующий пример иллюстрирует это, назначая дескриптор курсора в элементе hCursor структуры WNDCLASS, идентифицированной параметром wc.

WNDCLASS wc;
//заполнение структуры класса окна параметрами, которые описывают главное окно.

style = NULL; // стиль(и) класса
wc.lpfnWndProc = (WNDPROC) MainWndProc; // оконная процедура
wc.cbClsExtra = 0; // дополнительных данных в классе нет
wc.cbWndExtra = 0; // дополнительных данных для окна нет
wc.hInstance = hinst; // приложение, которое владеет классом
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // иконка класса
wc.hCursor = LoadCursor(hinst, MAKEINTRESOURCE(230)); // курсор класса
wc.hbrBackground = GetStockObject(WHITE_BRUSH); // фон класса
wc.lpszMenuName = "GenericMenu"; // меню класса
wc.lpszClassName = "GenericWClass" // имя класса
// регистрация класса окна.
return RegisterClass(&wc);

Когда класс окна зарегистрирован, курсор, идентифицированный как 230 в файле определения ресурса прикладной программы, будет задан по умолчанию как курсор для всех окон, основанных на классе.

Ваша прикладная программа может изменить внешний вид курсора, используя функцию SetCursor и определяя дескриптор другого курсора. Однако, когда курсор перемещается, Windows в новом месте снова рисует курсор класса. Чтобы предотвратить повторный вывод курсора класса, вы должны обрабатывать сообщение WM_SETCURSOR. Каждый раз, когда курсор перемещается, а ввод информации от мыши не захвачен, Windows посылает это сообщению окну, в котором перемещается курсор.

Вы можете устанавливать различные курсоры для различных условий при обработке WM_SETCURSOR. Например, следующий пример показывает, как всякий раз отображать курсор hCurs3, когда он перемещается поверх пиктограммы свернутой прикладной программы.

case WM_SETCURSOR:

// Если окно свернуто рисуется курсор hCurs3.
// Если окно не свернуто, рисуется курсор
// по умолчанию (курсор класса).

if (IsIconic(hwnd))
{
SetCursor(hCurs3);
break;
}

Когда окно не свернуто, Windows отображает курсор класса.

Вы можете заменить курсор класса, используя функцию SetClassLong. Эта функция изменяет заданные по умолчанию параметры настройки окна для всех окон данного класса. В следующем примере заменяется существующий курсор класса на курсор hCurs2.

// изменение курсора класса окна, представляемого hwnd
SetClassLong(hwnd, // дескриптор окна
GCL_HCURSOR, // изменяемый курсор
(LONG) hCurs2); // новый курсор

За более подробной информацией, обратитесь к статьям Классы окна и Информация вводимая от Мыши.

 

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