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

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

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

В этом разделе рассматриваются следующие темы.

Видимость курсора

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

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

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

Время вспышки — это затраченное время (в миллисекундах), необходимое для отображения, инвертировать и восстановить отображение курсора. Время вспышки курсора в два раза больше, чем время мигания.

Положение курсора

Положение курсора можно определить с помощью функции GetCaretPos . Позиция в клиентских координатах копируется в структуру, заданную параметром в GetCaretPos. Приложение может перемещать курсор в окне с помощью функции SetCaretPos . Окно может перемещать курсор только в том случае, если оно уже владеет курсором. SetCaretPos может перемещать курсор независимо от того, виден он или нет.

Удаление курсора

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

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