关于插入点

系统为每个消息队列提供一个插入点。 仅当窗口具有键盘焦点或处于活动状态时,才应创建插入点。 窗口应在失去键盘焦点或变为非活动状态之前销毁插入符号。 有关键盘输入的详细信息,请参阅 键盘输入

使用 CreateCaret 函数指定插入点的参数。 系统通过在插入点的位置、宽度和高度指定的矩形内反转像素颜色来形成插入点。 宽度和高度以逻辑单元指定;因此,插入符号的外观受窗口的映射模式的约束。

本节将讨论以下主题。

插入点可见性

定义插入点后,使用 ShowCaret 函数使插入点可见。 出现插入符号时,它会自动开始闪烁。 为了显示实心脱字号,系统会反转矩形中的每个像素;若要显示灰色插入点,则系统会反转其他像素;若要显示位图插入点,则系统仅反转位图的白色位。

反转插入点所需的运行时间(以毫秒为单位)称为 闪烁时间。 只要拥有消息队列的线程有处理消息的消息泵,插入符号就会闪烁。

用户可以使用控制面板设置插入点的闪烁时间,应用程序应遵循用户选择的设置。 应用程序可以使用 GetCaretBlinkTime 函数确定插入符号的闪烁时间。 如果要编写允许用户调整闪烁时间的应用程序(例如控制面板小程序),请使用 SetCaretBlinkTime 函数将闪烁时间的速率设置为指定的毫秒数。

闪光时间是显示、反转和还原插入符号的显示所需的已用时间(以毫秒为单位)。 脱字号的闪光时间是闪烁时间的两倍。

插入点位置

可以使用 GetCaretPos 函数确定插入点的位置。 以客户端坐标为单位的位置将复制到 由 GetCaretPos 中的 参数指定的结构。 应用程序可以使用 SetCaretPos 函数在窗口中移动插入点。 仅当窗口已拥有插入点时,窗口才能移动插入点。 SetCaretPos 可以移动插入点,无论它是否可见。

删除插入点

可以通过隐藏插入点来暂时删除插入点,也可以通过销毁插入点永久删除插入点。 若要隐藏插入点,请使用 HideCaret 函数。 当应用程序在处理消息时必须重绘屏幕,但必须使插入点远离时,这非常有用。 应用程序完成绘制后,可以使用 ShowCaret 函数再次显示插入点。 隐藏插入点不会破坏其形状或使插入点失效。 隐藏插入符号是累积的;也就是说,如果应用程序调用 HideCaret 五次,则它还必须调用 ShowCaret 五次,然后插入点才会再次出现。

若要从屏幕中删除插入点并销毁其形状,请使用 DestroyCaret 函数。 仅当当前任务中涉及的窗口拥有插入点时,DestroyCaret 才会销毁插入点。