Задание изображения курсора
Курсор — это небольшое изображение, показывающее расположение мыши или другого указывающего устройства. Многие приложения изменяют изображение курсора, чтобы оставить отзыв пользователю. Хотя это и не требуется, он добавляет в ваше приложение немного лака.
Windows предоставляет набор стандартных изображений курсоров, называемых системными курсорами. К ним относятся стрелка, рука, I-луч, песочные часы (которые в настоящее время вращаются) и другие. В этом разделе описывается использование системных курсоров. Дополнительные сведения о более сложных задачах, таких как создание пользовательских курсоров, см. в разделе Курсоры.
Вы можете связать курсор с классом окна, задав элемент hCursor структуры WNDCLASS или WNDCLASSEX . В противном случае курсором по умолчанию является стрелка. При наведении указателя мыши на окно окно получает WM_SETCURSOR сообщение (если другое окно не захватило мышь). На этом этапе происходит одно из следующих событий:
- Приложение устанавливает курсор, и процедура окна возвращает значение TRUE.
- Приложение ничего не делает и передает WM_SETCURSORв DefWindowProc.
Чтобы задать курсор, программа выполняет следующие действия:
- Вызывает LoadCursor для загрузки курсора в память. Эта функция возвращает дескриптор курсору.
- Вызывает SetCursor и передает дескриптор курсора.
В противном случае, если приложение передает WM_SETCURSORв DefWindowProc, функция DefWindowProc использует следующий алгоритм для установки изображения курсора:
- Если окно имеет родительский элемент, переадресуйте сообщение WM_SETCURSOR родительскому объекту для обработки.
- В противном случае, если в окне есть курсор класса, установите курсор класса.
- Если курсор класса отсутствует, установите курсор со стрелкой.
Функция LoadCursor может загружать настраиваемый курсор из ресурса или один из системных курсоров. В следующем примере показано, как задать для курсора предопределенный курсор выбора системной ссылки.
LPCTSTR cursor = IDC_HAND;
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 устанавливать курсор для неклиентской области.