c++ - SendMessage 发送的消息在其他类层次结构中未收到
问题描述
我有两个类层次结构,如下所示:
- A 类扩展 CWnd
- B 扩展 A
- C 扩展 B。
- D 类扩展 CWnd
- E 扩展 D
我怎么SendMessage
能从C
到D
?
附加信息(来自评论):
消息映射正确完成,消息已注册。这是我尝试过的:
我调用
SendMessage(...)
了 C 类的成员函数,它不起作用。当我这样做时,
GetTopLevelParent()->SendMessage(...)
它正在工作。
但在第二种情况下,它击中了监听器函数3 次。你能解释一下为什么吗?
解决方案
由于这两个类(直接C
或D
间接)都派生自CWnd
,因此它们都应该能够接收通过 发送的消息SendMessage
。对我来说,在D
.
确实,您拥有的不是两个层次结构。由于公共根类是CWnd
,它是一个层次结构:
- CWnd(公共根类)
- A(扩展 CWnd)
- B(扩展 A)
- C(扩展 B)
- B(扩展 A)
- D(扩展 CWnd)
- E(扩展 D)
- A(扩展 CWnd)
您必须将用户定义的处理程序添加到D
.
BEGIN_MESSAGE_MAP(CMyDoc, CDocument)
ON_MESSAGE( <message>, <memberFxn> )
// ...
END_MESSAGE_MAP()
阅读此处了解更多信息
发送到不同的CWnd
对象
至于发送到某个派生类的对象,调用它就CWnd
足够了。这也是可能的,而不必“作为发件人派生”,例如:SendMessage
CWmd
LRESULT send_to_D(D* d) {
return d->SendMessage(WM_APP+1, 0, 0);
}
基础设施
MFC 提供对基本 Windows 消息传输技术的轻松访问。[1]这种消息传递技术不仅用于传递信息,还用于管理控制流。它的主要目标是为事件驱动的应用程序提供基础设施。在这里阅读更多:
推荐阅读
- html - 如何在 webview 中显示本地 html 文件夹
- node.js - MongoDB:如何将数据从旧模式样式迁移到新集合
- java - 返回空值
- rust - 如何为我不拥有的类型的固有方法创建特征?
- python - TensorFlow 回归神经网络为所有内容输出相同的数字
- elasticsearch - 有没有办法只聚合弹性搜索中的查询命中?
- reactjs - 如何在 create-react-app 中以开发模式启用服务工作者?
- javascript - 为什么它不更新我数据库中的日期?
- regex - 如何在文档中找到可能以不同形式编写的单词?(Python)
- python - 在 azure 数据块和 azure 数据工厂中执行 python 脚本