编辑控件 MFC 中光标位置更改时是不是有通知代码?

Posted

技术标签:

【中文标题】编辑控件 MFC 中光标位置更改时是不是有通知代码?【英文标题】:Is there a notification code when cursor position changes in Edit Control MFC?编辑控件 MFC 中光标位置更改时是否有通知代码? 【发布时间】:2019-09-19 19:06:54 【问题描述】:

在编辑控件 MFC 中光标位置发生变化时是否发送通知代码?我想为用户显示光标(字符)位置

【问题讨论】:

RICHEDIT 控件发送EN_SELCHANGE,如果有帮助的话。 【参考方案1】:

当插入符号位置发生变化时,Edit 控件本身不会发送EN_... 通知。

但是,您可以使用 SetWinEventHook() 为您的应用的进程 ID 和 UI 线程 ID 注册 EVENT_OBJECT_LOCATIONCHANGE 通知。

EVENT_OBJECT_LOCATIONCHANGE 0x800B

对象的位置、形状或大小发生了变化。系统为以下用户界面元素发送此事件:caret 和窗口对象。服务器应用程序为其可访问对象发送此事件。

然后您可以让您的回调函数通过检查提供的hwnd 是否是您的编辑控件以及提供的idObject 是否为OBJID_CARET 来过滤通知。

OBJID_CARET

窗口中的文本插入栏(插入符号)。

检测到后,您可以通过向编辑控件发送EM_GETSEL 消息来获取实际的插入符号位置。

获取编辑控件中当前选择的开始和结束字符位置(在 TCHAR 中)。

或者,如果您使用的是CEdit 类,请使用它的GetSel() 方法。

调用此函数以获取编辑控件中当前选择(如果有)的开始和结束字符位置,使用返回值或参数。

【讨论】:

谢谢。我试试看。

以上是关于编辑控件 MFC 中光标位置更改时是不是有通知代码?的主要内容,如果未能解决你的问题,请参考以下文章

vc MFC EDIT控件 设置光标位置

MFC编程的时候,改变鼠标光标样式

MFC的静态控件怎么响应鼠标事件呀。。要详细一点的。。我菜鸟,谢谢

Visual Studio MFC 在键入/动态时更改编辑控件中的文本

CComboBox MFC 控件出现问题

MFC GUI自定义控件:如何绘制光标更新以响应鼠标移动?