WTL中消息映射初级
来源:互联网 发布:apache kylin使用教程 编辑:程序博客网 时间:2024/05/14 16:25
WTL 的消息映射机制和ATL的消息映射机制基本相同,WTL的消息机制的功能是在AtL的基础上加工细化了。都是通过宏定义实现
1:基本结构
BEGIN_MSG_MAP(CMainFrame) //系统事件消息 MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_DESTROY, OnDestroy) //命令消息,用户触发 COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit) …… //基类消息,消息链 CHAIN_MSG_MAP(CUpdateUI<CMainFrame>) CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>) END_MSG_MAP() //结尾
也有是:
BEGIN_MSG_MAP_EX(……) //开始 MSG_WM_CREATE(OnCreate) MSG_WM_CONTEXTMENU(OnContextMenu)END_MSG_MAP()//结尾
都是通过BEGIN_MSG_MAP 或者是BEGIN_MSG_MAP_EX开始,END_MSG_MAP()//结尾。中间添加消息映射。
2:内部机制
消息映射的内部机制是由多个队列形式呈现,以msgMapID区分。默认是0,可通过:ALT_MSG_MAP(msgMapID)修改。
即:如果没有ALT_MSG_MAP(msgMapID),那么所有的映射都是在一个队列中。
下列实例:
BEGIN_MSG_MAP(CWtlTest2View) MESSAGE_HANDLER(WM_PAINT, OnPaint) //修改 消息映射标识符pMsg,默认为0,此处修改为1 ALT_MSG_MAP(1) // Handle notify message. COMMAND_ID_HANDLER(ID_ViewAct1, OnViewAct1) END_MSG_MAP()
目的:读取消息映射标识符pMsg,为1的消息,并处理。这一股于:不同窗口的消息传递。实例
//主窗口有个按钮点击,在子窗口中响应;//主窗口消息映射CWtlTest2View m_view;BEGIN_MSG_MAP(CMainFrame) ……………… CHAIN_MSG_MAP(CUpdateUI<CMainFrame>) CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>) CHAIN_MSG_MAP_ALT_MEMBER(m_view, 1) //View中响应:CWtlTest2View,消息映射ID_ViewAct1END_MSG_MAP()//子窗口消息映射BEGIN_MSG_MAP(CWtlTest2View) MESSAGE_HANDLER(WM_PAINT, OnPaint) //修改 消息映射标识符pMsg,默认为0,此处修改为1 ALT_MSG_MAP(1) // Handle notify message. COMMAND_ID_HANDLER(ID_ViewAct1, OnViewAct1) END_MSG_MAP()
3,内部顺序
内部消息是按顺序进行解析的,如果要将没有匹配到的消息传递给别的类或对象处理,可通过:
CHAIN_MSG_MAP实现,该宏的功能是将消息转到目标类的消息映射处理,如果没有处理的再回来,相当于增加了一个过滤器。CHAIN_MSG_MAP有几种变形:
CHAIN_MSG_MAP(类名),将消息导入其他类处理。一般是原类的基类
CHAIN_MSG_MAP_ALT(类名,number),将消息导入其他类处理,并将消息ID修改(默认是0)。一般是原类的基类
CHAIN_MSG_MAP_ALT_MEMBER(对象, 1),将消息导入特定对象处理,并将消息ID修改(默认是0)。一般用于不同窗口的通信;
//MDI的子窗口的情况
CHAIN_MDI_CHILD_COMMANDS()把所有的菜单的消息传递到MDI的子窗口,使用默认消息ID
CHAIN_CLIENT_COMMANDS()可将消息继续往下传给View处理
//SDI的情况
使用CHAIN_MSG_MAP_ALT_MEMBER()来传递消息的view窗口。
//注意:REFLECT_NOTIFICATION() 反射宏
部分控件需要在消息宏中添加REFLECT_NOTIFICATION()以支持自绘消息。该宏通过参数取得发送事件控件的窗体句柄,并通过该句柄将事件发还给控件.
最后还有一点不是所有的控件都可以用COwnerDraw来自绘控件的,只有5个控件(MENU,LISTBOX,COMBOBOX,BUTTON,STATIC)支持.
欢迎指正!
- WTL中消息映射初级
- WTL中消息映射宏
- [ATL/WTL]_[初级]_[Windows消息循环初解]
- 解读ATL/WTL/MFC消息映射的实现方式
- [ATL/WTL]_[初级]_[转发消息让CStatic支持点击消息操作]
- [ATL/WTL]_[初级]_[Win32窗口自定义消息处理过程]
- WTL在父窗口中响应控件的通知消息
- VC6中添加消息映射
- MFC中消息映射实例
- MFC中ON_COMMAND_RANGE()消息映射
- visual 中消息映射机制
- 模拟MFC和WTL对Windows窗口框架消息映射机制的封装代码
- WTL的消息机制
- WTL托盘消息分流器
- WTL热键消息分流器
- WTL 消息流
- WTL重写WM_MOUSEHOVER消息
- WTL重写WM_MOUSEHOVER消息
- 文件上传
- listview addheadview() 遇到的问题
- 集成腾讯Bugly异常监测平台
- linux搭建自已的网站
- JQuery:多张图片的淡入淡出效果。
- WTL中消息映射初级
- 理解jQuery中的Promise
- 网页初始化
- javaweb学习总结——监听器(Listener)在开发中的应用
- 文章标题
- java hash_hmac
- CSDN评论中插入链接
- 在线云评测系统日志(十):获取输入文件的评测数据进行程序评测
- 使用Cropper进行图片剪裁上传