如何处理窗口叠加时的自定义消息路由
来源:互联网 发布:php 字符串分割 编辑:程序博客网 时间:2024/05/22 13:15
先看一个图片
目的: A可能希望接收B,C,D,D1等各个控件的消息。
情况:目前B为一自定义控件,且在B.h向外提供一通知消息WM_B_NOTIFY(WM_USER+101)。
但是A也想要接收C,D的通知消息,那么你可能想要SetBWndNotify,SetCNotify。
但是你需要注意不能使你自定义的消息ID和WM_USER+101相同。这样你可能去B.h里面找那个WM_B_NOTIFY定义的值,倘若控件繁多,你就难以完成这一任务了。
解决:B和其他控件要保持一致性。
NOTE1: 不主动向外提供消息。
当前窗口类的.h文件不要定义向外部通知的消息。
NOTE2: 向外部仅提供一个接口,外部告诉自己消息发送的目的地。
外部告诉控件消息通知的目的地。
示例:加入D控件和D1控件都定义在D.h文件中,我们的D1控件会向D通知消息WM_D1_NOTIFY,并且D也会向外通知消息WM_D_NOTIFY,那么D必须提供一个接口给使用D类的对象(假设A类)调用,这样D的消息就通过该接口向外发送。
A.h里面有:
D m_d;
A.cpp里面有:
#define USER_MESSAGE_BASE (WM_USER + 500)
#define UM_D_NOTIFY (USER_MESSAGE_BASE + 1)
ON_MESSAGE(UM_D_NOTIFY, OnDNotify)
m_d.SetNotifyWindow(GetSafeHwn(), UM_D_NOTIFY);
A::OnDNotify()
{}
千万不要在D.h定义D的通知消息,像下面这种用法不可取。
如:
在D.h里面有WM_D_NOTIFY
在D.cpp里面有GetParent()->PostMessage(WM_D_NOTIFY, wParam, lParam);
在A.cpp里面直接
ON_MESSAGE(WM_D_NOTIFY, OnDNotify)
A::OnDNotify()
{
}
下面是讲解:
- 如何处理窗口叠加时的自定义消息路由
- 如何处理窗口叠加时的自定义消息路由
- 窗口关闭的消息路由
- 如何处理窗口的鼠标离开消息
- 如何处理鼠标离开窗口的消息
- 窗口的消息处理
- 如何处理图片叠加
- CreateWindowEx()自定义窗口句柄,消息处理
- VC++如何处理自定义消息
- VC++如何处理自定义消息
- VC++如何处理自定义消息
- VC++如何处理自定义消息
- 自定义消息的处理
- 自定义的窗口消息实现
- 如何处理自定义消息 (非命令消息)
- Windows消息:如何自定义窗口消息与线程消息
- Windows消息:如何自定义窗口消息与线程消息
- MFC中窗口收到WM_PAINT消息是如何处理的,什么情况下产生WM_PAINT消息
- SQL 在OPENQUERY中使用传入参数和临时表获取参数
- 覆盖和重载
- 内敛元素和块元素区别
- windows 7 下安装Oracle 9i 解决方法
- 一个干扰wifi的shell脚本
- 如何处理窗口叠加时的自定义消息路由
- UNDO表空间备份恢复(四)
- 导出到 word 并且具有一定的格式
- 使用ApplicationContextAware得到一个ApplicationContext对象
- linux2.6.32.2 mini2440平台移植-- LCD 显示驱动 ( W35屏 )
- 常用正则规范总结
- js判断是http还是https
- cocoa开发使用Doxygen开发
- HDU4091 Zombie’s Treasure Chest