Курсор мыши - незаметный, но важнейший элемент пользовательского интерфейса. От скорости и точности его перемещения зависит удобство работы с компьютером. Давайте разберемся, как устроен курсор, откуда он появился и как им управлять.
История создания курсора мыши
Первые разработки в области курсора мыши относятся к 1968 году, когда американский изобретатель Дуглас Энгельбарт вместе с командой Стэнфордского исследовательского института создали одни из первых элементов графического интерфейса пользователя, в том числе курсор и возможность гиперссылок.
9 декабря 1968 года состоялась легендарная демонстрация системы oN-Line System (NLS), получившая название "The Mother of All Demos" ("Мать всех демонстраций"). На ней впервые были продемонстрированы мышь и графический пользовательский интерфейс с курсором.
Первоначально курсор имел примитивный вид - чаще всего это был прямоугольник или простая стрелка. С развитием графических возможностей компьютеров дизайн курсора совершенствовался.
В операционной системе Windows курсор приобрел характерную стрелку с тенью. Появились различные анимированные курсоры для выделения определенных действий, например "песочные часы" во время ожидания.
Современные курсоры в Windows сохраняются в форматах .cur и .ani с размером 32x32 пикселя и поддержкой альфа-канала.
Устройство курсора мыши
Курсор мыши может иметь различную форму и размер, хотя чаще всего это изображение 32x32 пикселя. Небольшой размер позволяет курсору не загораживать важную информацию под собой.
Старые монохромные дисплеи поддерживали только черно-белые курсоры. Современные системы отображения позволяют использовать курсоры в цвете и полупрозрачные курсоры с альфа-каналом.
Курсор может быть статичным изображением или анимированным, когда кадры меняются с определенной частотой для создания иллюзии движения.
Примеры анимированных курсоров:
- Песочные часы или круговая индикация ожидания
- Стрелка с волнообразным движением вправо-влево
- Рука с поднятым вверх указательным пальцем
Важной частью курсора является точка, называемая "горячей точкой". Она определяет положение курсора на экране при взаимодействии с интерфейсом. У стрелки горячая точка располагается на конце, у перекрестия - в центре.
Изображения курсоров хранятся в файлах формата .cur (статичные курсоры) и .ani (анимированные курсоры). Несмотря на внешнее сходство, курсор отличается от иконки тем, что должен соответствовать параметрам текущего устройства отображения.
Стандартные и пользовательские курсоры
Операционная система Windows поставляется с набором стандартных курсоров, доступных для использования. Их идентификаторы перечислены в заголовочных файлах Windows SDK.
Например:
- IDC_ARROW - стандартная стрелка
- IDC_CROSS - перекрестие
- IDC_WAIT - песочные часы
Каждому стандартному курсору по умолчанию соответствует определенное графическое изображение. При необходимости его можно заменить вызовом функции SetSystemCursor.
Для создания собственных курсоров обычно используются графические редакторы. Готовый курсор добавляется в ресурсы приложения и загружается вызовом LoadCursor во время выполнения программы.
Рекомендуется реализовывать пользовательские курсоры через ресурсы, а не создавать их динамически. Это позволяет кэшировать курсоры и совместно использовать их между приложениями.
Таким образом, устройство курсора довольно простое, но позволяет гибко настраивать этот важный элемент интерфейса под нужды пользователя и приложения.
Управление видимостью и положением курсора
Система автоматически отображает курсор мыши в нужной позиции при перемещении мыши. Но при необходимости положение и видимость курсора можно контролировать программно.
Для получения текущих координат курсора используется функция GetCursorPos. А для явной установки курсора в нужную позицию - SetCursorPos.
Чтобы получить дескриптор текущего курсора, вызывается функция GetCursor. А для принудительной смены курсора - SetCursor.
Скрыть и показать курсор позволяет функция ShowCursor. Она использует внутренний счетчик отображений курсора, увеличивая или уменьшая его.
Если нужно ограничить область перемещения курсора, можно задать прямоугольную область с помощью функции ClipCursor. Это полезно, например, чтобы удерживать курсор в пределах модального диалога.
Функция CopyCursor позволяет скопировать дескриптор курсора из одного приложения в другое для совместного использования курсоров.
Курсоры классов окон
При регистрации класса окна с помощью RegisterClass можно назначить ему курсор по умолчанию, который будет использоваться всеми окнами этого класса.
Чтобы переопределить курсор класса в конкретном окне, нужно обработать в нем сообщение WM_SETCURSOR.
Также курсор класса окон можно поменять вызовом SetClassLong, который изменит параметры окна по умолчанию для всех экземпляров класса.
Обработка событий мыши
При движении мыши система отслеживает положение курсора и отправляет сообщения о событиях мыши в окна под курсором.
В сообщении указываются координаты "горячей точки" курсора в момент события.
Обрабатывая эти сообщения, приложение может реагировать на действия пользователя с мышью.
Смена курсора при наведении
Когда курсор попадает в разные области интерфейса, его внешний вид меняется в соответствии с возможными действиями.
Например, при наведении на ссылку курсор принимает вид руки, а в поле ввода текста - вертикальной линии.
Такую смену курсора при наведении можно настраивать средствами CSS для веб-страниц, задав нужный вид через свойство cursor.
Грамотно подобранные курсоры повышают интуитивность интерфейса для пользователя.
Что делать если курсор залип и зайти в какие-либо настройки нет возможности.
Ноутбук с предустановленной ОС Windows 8 купила три дня назад и уже два раза случалась такая ерунда.