Задание изображения курсора
Курсор — это небольшое изображение, показывающее расположение мыши или другого указывающего устройства. Многие приложения изменяют изображение курсора, чтобы оставить отзыв пользователю. Хотя это не обязательно, он добавляет хороший немного полировки к вашему приложению.
Windows предоставляет набор стандартных изображений курсоров, называемых системными курсорами. К ним относятся стрелка, рука, I-луч, часовые очки (который в настоящее время спиннинг круг), и другие. В этом разделе описывается использование системных курсоров. Более сложные задачи, такие как создание пользовательских курсоров, см. в разделе "Курсоры".
Курсор можно связать с классом окна, задав элемент hCursor структуры WNDCLASS или WNDCLASSEX . В противном случае курсором по умолчанию является стрелка. При перемещении мыши по окну окно получает сообщение WM_SETCURSOR (если другое окно не захватило мышь). На этом этапе происходит одно из следующих событий:
- Приложение задает курсор, а процедура окна возвращает значение TRUE.
- Приложение ничего не делает и передает WM_SETCURSORв DefWindowProc.
Чтобы задать курсор, программа выполняет следующие действия:
- Вызывает LoadCursor для загрузки курсора в память. Эта функция возвращает дескриптор курсору.
- Вызывает SetCursor и передает его в дескриптор курсора.
В противном случае, если приложение передает WM_SETCURSORв DefWindowProc, функцияDefWindowProc использует следующий алгоритм для задания изображения курсора:
- Если в окне есть родительский элемент, переадресуйте сообщение WM_SETCURSOR родительскому элементу для обработки.
- В противном случае, если в окне есть курсор класса, установите курсор на курсор класса.
- Если курсор класса отсутствует, установите курсор на курсор со стрелкой.
Функция LoadCursor может загружать настраиваемый курсор из ресурса или один из системных курсоров. В следующем примере показано, как установить курсор на системный курсор руки.
hCursor = LoadCursor(NULL, cursor);
SetCursor(hCursor);
При изменении курсора изображение курсора сбрасывается при следующем перемещении мыши, если только вы не перехватите сообщение WM_SETCURSOR и снова установите курсор. В следующем коде показано, как обрабатывать WM_SETCURSOR.
case WM_SETCURSOR:
if (LOWORD(lParam) == HTCLIENT)
{
SetCursor(hCursor);
return TRUE;
}
break;
Этот код сначала проверяет более низкие 16 битов lParam. Если LOWORD(lParam)
равно HTCLIENT, это означает, что курсор находится над клиентской областью окна. В противном случае курсор находится над неклиентной областью. Как правило, следует задать курсор только для клиентской области и позволить Windows задать курсор для неклиентной области.
Следующая
Ввод пользователем: расширенный пример