Окт 16

Курсоры

Курсоры — это изображения размером 32 х 32 пиксела, которые отмечают положение курсора (указателя) мыши. Курсоры во многом похожи на пиктограммы. Их главное отличие заключается в наличии активной точки (hotspot). Активной точкой называется пиксел, который принадлежит изображению курсора и отмечает его точное положение на экране в любой момент времени. В стандартном курсоре, имеющем вид стрелки, активная точка расположена в левом верхнем углу курсора.
Технологию использования в приложении курсоров, определенных программистом, продемонстрируем, продолжая разработку программы Russia.
В новой редакции программа будет изменять форму курсора мыши в зависимости от того, в какой зоне клиентской области он находится. В основном курсор мыши будет иметь форму перекрестья, которая задается предопределенным курсором IDC_CR0SS. Но при приближении к верхней границе клиентской области курсор будет принимать форму стрелки, направленной вверх, а при приближении к нижней границе клиентской области — форму стрелки, направленной вниз. Кроме того, в окне программы будет отображаться информация о текущей позиции курсора, связанной с его активной точкой. Таким образом, к проекту нужно добавить два ресурса курсоров с идентификаторами IDCJJP и IDC_D0WN.
Процедура создания нового курсора в графическом редакторе очень похожа на рассмотренную выше процедуру создания пиктограммы. На первом шаге в диалоговом окне Insert Resource вместо типа ресурса Icon выбирается тип Cursor. Вызванный графический редактор будет работать в режиме создания курсора.
В отличие от окна графического редактора, работающего в режиме создания пиктограммы, в этом окне есть кнопка Set Hotspot, располагающаяся на правом краю панели инструментов. Координаты активной точки отображаются слева от этой кнопки и по умолчанию равны (0, 0). Позиция активной точки указывается всегда относительно левого верхнего угла изображения.
Чтобы назначить активную точку, нужно нажать кнопку Set Hotspot, а затем щелкнуть мышью на том пикселе изображения, который должен стать активной точкой. Для нашего курсора это будет пиксел на верхнем окончании стрелки. После указанных действий надпись слева от кнопки примет вид Hot spot: 15, 0.
Сохраните новые ресурсы в файле описания ресурсов, выполнив команду меню File ► Save. Если теперь открыть файл Russia.гс в текстовом режиме, то можно увидеть две новые строчки с определениями:
IDCJJP CURSOR DISCARDABLE "up.cur" IDC_D0WN CURSOR DISCARDABLE "down.cur"
Завершив определение ресурсов с курсорами, займемся кодом программы.
Необходимо определить дескрипторы используемых курсоров (типа HCURS0R) и загрузить ресурсы при помощи функции LoadCursor, вызов которой аналогичен вызову функции Loadlcon.
В нашей программе будут использоваться три курсора: hCursor для вывода перекрестья (предопределенный курсор IDC_CR0SS), hCursorUp для вывода стрелки вверх (IDC_UP) и hCursorDown для вывода стрелки вниз (IDC_D0WN).
Курсор hCursor должен стать основным курсором приложения. Для ,пого нужно модифицировать соответствующее поле оконного класса, вызвав следующую функцию:
SetClassLongthWnd, GCLJCURSOR. (LONG)hCursor);
Для динамического изменения формы курсора в зависимости от его местонахождения применяется функция SetCursor:
HCURSOR SetCursor(HCURSOR hCursor);
Функция делает текущим курсор, который передается ей в качестве параметра. При этом возвращается дескриптор предшествующего курсора.
Отслеживание положения курсора обычно осуществляется при обработке сообщения WM_M0USEM0VE. Параметр оконной процедуры IParam в этот момент содержит координаты текущей позиции курсора мыши х и у, которые размещаются в младшем и старшем словах параметра соответственно. Эта позиция определяется относительно левого верхнего угла клиентской области.