Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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) |
![]() |
IDC_SIZENESW MAKEINTRESOURCE(32643) |
![]() |
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. Однако эта функция не влияет на общий курсор. Общий курсор действителен, пока модуль, из которого он был загружен, остается в памяти. Следующие функции получают общий курсор:
- LoadCursor
- LoadCursorFromFile
- LoadImage (если вы используете флаг LR_SHARED)
- CopyImage (если используется флаг LR_COPYRETURNORG, а hImage — общий курсор)
Если вам больше не нужен курсор, созданный с помощью функции createIconIndirect, необходимо уничтожить курсор. Функция DestroyIcon уничтожает дескриптор курсора и освобождает память, занятую курсором. Используйте эту функцию только для курсоров, созданных с помощью CreateIconIndirect.
Дублирование курсора
Функция CopyCursor копирует идентификатор курсора. Это позволяет приложению или коду DLL получать дескриптор курсора, принадлежащего другому модулю. Затем, если другой модуль освобожден, модуль, который скопировал курсор, все равно может использовать дизайн курсора.
Сведения о добавлении, удалении или замене ресурсов курсора в исполняемых файлах см. в разделе Resources.
Курсор класса Окно
При регистрации класса окна с помощью функции RegisterClass можно назначить курсор по умолчанию, известный как курсор класса . После регистрации класса окна каждое окно этого класса имеет указанный курсор класса.
Чтобы переопределить курсор класса, обработайте сообщение WM_SETCURSOR. Можно также заменить курсор класса с помощью функции SetClassLong. Эта функция изменяет параметры окна по умолчанию для всех окон указанного класса. Дополнительные сведения см. в курсоре класса.