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


О каретках

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

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

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

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

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

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

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

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

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

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

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

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

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