Поделиться через


Сведения о курсорах

Windows предоставляет набор стандартных курсоров , которые могут быть использованы приложениями. В WinUser.h определены следующие идентификаторы курсоров:

Ценность Значение
IDC_ARROW
MAKEINTRESOURCE(32512)
Обычный выбор
IDC_IBEAM
MAKEINTRESOURCE(32513)
выбор текста
IDC_WAIT
MAKEINTRESOURCE(32514)
занято
IDC_CROSS
MAKEINTRESOURCE(32515)
Выбор точности
IDC_UPARROW
MAKEINTRESOURCE(32516)
альтернативный выбор
IDC_SIZENWSE
MAKEINTRESOURCE(32642)
диагональное изменение размера 1
IDC_SIZENESW
MAKEINTRESOURCE(32643)
Диагональное изменение размера 2
IDC_SIZEWE
MAKEINTRESOURCE(32644)
горизонтальное изменение размера
IDC_SIZENS
MAKEINTRESOURCE(32645)
вертикальное изменение размера
IDC_SIZEALL
MAKEINTRESOURCE(32646)
перемещение
IDC_NO
MAKEINTRESOURCE(32648)
недоступно
IDC_HAND
MAKEINTRESOURCE(32649)
Выберите ссылку
IDC_APPSTARTING
MAKEINTRESOURCE(32650)
Работает в фоновом режиме
IDC_HELP
MAKEINTRESOURCE(32651)
Помогите выбрать
IDC_PIN
MAKEINTRESOURCE(32671)
Выбор местоположения
IDC_PERSON
MAKEINTRESOURCE(32672)
выберите "Человек"

Также доступно несколько дополнительных курсоров, которые не имеют идентификаторов, определенных в WinUser.h (или считаются устаревшими):

Ценность Значение
MAKEINTRESOURCE(32631) курсор для пера.
MAKEINTRESOURCE(32652) курсор прокрутки со стрелками, указывающими на север и юг.
MAKEINTRESOURCE(32653) курсор прокрутки со стрелками, указывающими на запад и восток.
MAKEINTRESOURCE(32654) курсор прокрутки со стрелками, указывающими на север, юг, восток и запад.
MAKEINTRESOURCE(32655) курсор прокрутки со стрелкой на север.
MAKEINTRESOURCE(32656) курсор прокрутки со стрелкой, указывающей на юг.
MAKEINTRESOURCE(32657) курсор прокрутки со стрелкой на запад.
MAKEINTRESOURCE(32658) Курсор прокрутки со стрелкой на востоке.
MAKEINTRESOURCE(32659) курсор прокрутки со стрелками, указывающими на север и запад.
MAKEINTRESOURCE(32660) курсор прокрутки со стрелками, указывающими на север и восток.
MAKEINTRESOURCE(32661) курсор прокрутки со стрелками, указывающими на юг и запад.
MAKEINTRESOURCE(32662) курсор прокрутки со стрелками, указывающими на юг и восток.
MAKEINTRESOURCE(32663) курсор со стрелкой на экране.

Информацию об использовании стандартных курсоров см. в руководствах.

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

Приложение может использовать функцию getIconInfoдля получения текущего изображения для курсора и может нарисовать курсор с помощью функции DrawIconEx.

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

настраиваемые курсоры, включая руку, банан, барабан, наручные часы на руке, метроном

Курсоры могут быть монохромными или цветными, а также статическими или анимированными. Тип курсора, используемого в определенной компьютерной системе, зависит от отображения системы. Старые экраны, такие как VGA, не поддерживают цвет или анимированные курсоры. Новые экраны, драйверы отображения которых используют подсистему точечных карт (DIB) независимо от устройства, поддерживают их.

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

В этом обзоре содержатся сведения о следующих разделах:

Горячее место

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

горячие точки на двух курсорах

При возникновении события ввода мыши драйвер мыши преобразует событие в соответствующее сообщение мыши, включающее координаты горячей точки. Система отправляет сообщение мыши в окно, содержащее горячее место или в окно, которое записывает входные данные мыши. Для получения дополнительной информации, см. Ввод мыши.

Мышь и курсор

Система отражает движение мыши, перемещая курсор на экране соответствующим образом. При перемещении курсора по разным частям окон или в разные окна система (или приложение) изменяет внешний вид курсора. Например, когда курсор пересекает гиперссылку, система изменяет курсор с стрелки на руку.

стандартный курсор изменяется на руку при наведении на гиперссылку

Если у системы нет мыши, система отображает и перемещает курсор, только если пользователь выбирает определенные системные команды, например те, которые используются для размера или перемещения окна. Чтобы предоставить пользователю метод отображения и перемещения курсора, если мышь недоступна, приложение может использовать функции курсора для имитации перемещения мыши. Учитывая эту возможность моделирования, пользователь может использовать клавиши со стрелками для перемещения курсора.

Создание курсора

Так как стандартные курсоры предопределяются, их не нужно создавать. Чтобы использовать стандартный курсор, приложение извлекает дескриптор курсора с помощью функции LoadCursor или LoadImage. Дескриптор курсора — это уникальное значение типа HCURSOR, которое определяет стандартный или настраиваемый курсор.

Для создания пользовательского курсора для приложения обычно используется графическое приложение и включается курсор в качестве ресурса в файл определения ресурсов приложения. Во время выполнения вызовите LoadCursor, чтобы получить дескриптор курсора. Ресурсы курсора содержат данные для нескольких различных устройств отображения. Функция LoadCursor автоматически выбирает наиболее подходящие данные для текущего устройства отображения. Чтобы загрузить курсор из файла .CUR или .ANI, используйте функцию LoadCursorFromFile.

Можно также создать настраиваемый курсор во время выполнения с помощью функции CreateIconIndirect, которая создает курсор на основе содержимого структуры ICONINFO. Функция GetIconInfo заполняет эту структуру координатами горячей точки и информацией о связанной маске и цвете.

Приложения должны реализовывать пользовательские курсоры в качестве ресурсов и использовать LoadCursor, LoadCursorFromFileили LoadImage, а не создавать курсор во время выполнения. Использование ресурсов курсоров позволяет избежать зависимости устройств, упрощает локализацию и позволяет приложениям совместно использовать макеты курсоров.

Функция CreateIconFromResourceEx позволяет приложению создавать значки и курсоры на основе данных ресурсов. CreateIconFromResourceEx создает курсор на основе двоичных данных ресурсов из других исполняемых (.exe) файлов или библиотек DLL. Перед ним должны предшествовать вызовы функции LookupIconIdFromDirectoryEx, а также несколько функций ресурсов. LookupIconIdFromDirectoryEx определяет наиболее подходящие данные курсора для текущего устройства отображения. Дополнительные сведения о функциях ресурсов см. в разделе Resources.

Расположение курсора и внешний вид

Система автоматически отображает курсор мыши и обновляет его положение на экране. Текущие координаты экрана курсора можно получить и переместить курсор в любое расположение на экране с помощью функций GetCursorPos и SetCursorPos соответственно.

Вы также можете получить дескриптор текущего курсора, используя функцию GetCursor, и установить курсор, используя функцию SetCursor. После вызова SetCursorвнешний вид курсора не изменяется, пока мышь не перемещается, курсор явно устанавливается на другой курсор или выполняется системная команда.

Когда пользователь перемещает мышь, система перерисовывает курсор в новом расположении. Система автоматически перерисовывает макет курсора, связанный с окном, на которое указывает курсор.

С помощью функции ShowCursor можно скрыть и снова показать курсор, не изменяя дизайн курсора. Эта функция использует внутренний счетчик для определения времени скрытия или отображения курсора. Попытка показать курсор увеличивает счетчик; попытка скрыть курсор уменьшает счетчик. Курсор отображается только в том случае, если этот счетчик больше или равен нулю.

Функция GetCursorInfo получает следующие сведения для глобального курсора: скрыт ли курсор или отображается, дескриптор курсора и координаты курсора.

Ограничение курсора

Курсор можно ограничить прямоугольной областью на экране с помощью функции ClipCursor. Это полезно, если пользователь должен реагировать на определенное событие в ограниченной области прямоугольника. Например, можно использовать ClipCursor, чтобы ограничить курсор модальным диалоговым окном, предотвращая взаимодействие пользователя с другими окнами, пока диалоговое окно не будет закрыто.

Функция GetClipCursor извлекает координаты экрана прямоугольной области, к которой курсор временно ограничен. При необходимости ограничить курсор можно также использовать эту функцию для сохранения координат исходной области, в которой курсор может перемещаться. Затем можно восстановить курсор в исходную область, когда новое ограничение больше не требуется.

Уничтожение курсора

Можно уничтожить дескриптор курсора и освободить занимаемую курсором память, вызвав функцию DestroyCursor. Однако эта функция не влияет на общий курсор. Общий курсор действителен, пока модуль, из которого он был загружен, остается в памяти. Следующие функции получают общий курсор:

Если вам больше не нужен курсор, созданный с помощью функции createIconIndirect, необходимо уничтожить курсор. Функция DestroyIcon уничтожает дескриптор курсора и освобождает память, занятую курсором. Используйте эту функцию только для курсоров, созданных с помощью CreateIconIndirect.

Дублирование курсора

Функция CopyCursor копирует идентификатор курсора. Это позволяет приложению или коду DLL получать дескриптор курсора, принадлежащего другому модулю. Затем, если другой модуль освобожден, модуль, который скопировал курсор, все равно может использовать дизайн курсора.

Сведения о добавлении, удалении или замене ресурсов курсора в исполняемых файлах см. в разделе Resources.

Курсор класса Окно

При регистрации класса окна с помощью функции RegisterClass можно назначить курсор по умолчанию, известный как курсор класса . После регистрации класса окна каждое окно этого класса имеет указанный курсор класса.

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