[英]How do I setup a callback mechanism for RichEdit in win32
在win32中,如何为尚未创建自己的RichEdit设置回调机制?
第1部分
我正在从另一个应用程序的GUI中的textedit字段中读取 。 现在可以正常工作,除了第一次读取后,我只想获取新行或修改过的行。 在GTK +或Qt中,我只是在某些信号上安装了回调,当字段更改时会对其进行编辑,但是在Win32上它如何工作?
我的MSDN搜索结果没有任何用处,可能是因为我不知道要搜索的确切术语。 textedit的类是RichText20W ,它具有一些可能以某种方式使用的消息 ,尽管该文章只是讨论了如何将它们用作类的父类。
第2部分
另外, 如果没有这样的“文本更改,这是新插入的文本”回调,该回调立即返回新内容,则我需要某种方式来轻松检测到新内容。 从我的头上来:
选项2可能不可行,因为textedit可以包含任意数量的文本。 标记部分听起来很可行,但我的Win32技能薄弱和Win32函数名称糟糕,这又一次阻止了我找到正确的方法。
请注意,所有这些对于我不拥有且尚未创建的textedit必须是可行的,它们属于第三方进程。
C ++中的代码示例受到高度赞赏。
放弃
显然,如果有更好的方法,请告诉我。 根据我以前使用GTK + / Qt的经验,我仅假设回调是要使用的方法。 随时向我展示路径:)
Win32控件不适用于您可以订阅的特定于消息的回调。 它们只是在发生某些情况(在本例中为EN_UPDATE,EN_CHANGE等)时将消息发送到其父窗口。 即使这些事件也不能告诉您什么文本已更改。 他们只告诉你它确实改变了。
您可以对父类进行子类化,但是SetWindowLongPtr的文档明确声明您“不应对由另一个进程创建的窗口类进行子类化”。 钩子可能会出现这种情况,但是我还没有足够地使用它们来确定您实际将如何使用它。
我意识到这是一篇过时的文章,但是这篇文章似乎在做类似的事情。
根据Joel的回答,我退出寻找回调,只是制作了一个小类,将其自身(虽然不是通过真正的API钩子)挂接到richedit,并每秒对其内容长度进行一次轮询,以及自上次轮询以来是否已更改,它请求内容,将其与以前的已知内容进行比较,并发出内容已更改的信号。
为此,这似乎可以正常工作,但是如果有人仍然知道更好的方法(通过API挂钩或其他某种经过实践验证的方法),请发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.