WTL中的窗口消息传递

博客已经开了好久了,却一直空着,没有什么动力来写点什么。

最近一直在研究WTL做界面,在网上也找了很多资料,都是左一篇,右一篇的,全部收藏在了有道云笔记里了。

 

好东西当然不能一个人私藏了,所以想起这个博客来了,希望把WTL的一些心得在这里贡献给大家,也希望大家把相关的链接给我,我整理好之后全部放在这里。

原理性的东西,大家可以查看MFC程序员的WTL指南,在www.codeproject.com可以搜到。我只是想分享一些使用心得。

1、关于消息传递

WTL之中的消息传递可通过代码看明白。

 

当我们想把菜单的消息传递到MDI的子窗口,可以使用WTL中定义的宏CHAIN_MDI_CHILD_COMMANDS()

菜单消息(WM_COMMAND)传给ChildFrame
用宏 CHAIN_MDI_CHILD_COMMANDS()

    BEGIN_MSG_MAP(CMainFrame)         CHAIN_MDI_CHILD_COMMANDS()         CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)         CHAIN_MSG_MAP(CMDIFrameWindowImpl<CMainFrame>)     END_MSG_MAP()


可将消息传给子窗口
CHAIN_MDI_CHILD_COMMANDS()定义如下
// MDI child command chaining macro (only for MDI frame windows)
 #define CHAIN_MDI_CHILD_COMMANDS() \
     if(uMsg == WM_COMMAND) \
     { \
         HWND hWndChild = MDIGetActive(); \
         if(hWndChild != NULL) \
             ::SendMessage(hWndChild, uMsg, wParam, lParam); \
     }

然后子窗口若有View,用宏
CHAIN_CLIENT_COMMANDS()可将消息继续往下传给View(View是子窗口客户区创建的一个覆盖客户区的窗口)

BEGIN_MSG_MAP(CChildFrame) MESSAGE_HANDLER(WM_CREATE, OnCreate) //COMMAND_ID_HANDLER(ID_FILE_SAVE, OnSave) MESSAGE_HANDLER(WM_FORWARDMSG, OnForwardMsg) CHAIN_CLIENT_COMMANDS() CHAIN_MSG_MAP(CMDIChildWindowImpl<CChildFrame>) END_MSG_MAP()

宏定义如下

// Client window command chaining macro (only for frame windows) #define CHAIN_CLIENT_COMMANDS() \     if(uMsg == WM_COMMAND && m_hWndClient != NULL) \         ::SendMessage(m_hWndClient, uMsg, wParam, lParam);

 

如果使用的是SDI的话,可以使用CHAIN_MSG_MAP_ALT_MEMBER()来传递消息的view窗口。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值