MFC处理消息的顺序

MFC处理消息的顺序

vc编程中,消息的路由和传递路径一直是一个大的问题,主要是由于windows本身的消息种类有很多,像系统消息,命令消息和自定义消息,而MFC中又玩起狸猫换太子的游戏,偷换窗口处理函数,在这里想归纳一下简单的消息传递路径:

AfxWndProc()

接受消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc()

AfxCallWndProc()

保存消息(消息标识符和参数)供以后参考,然后调用WindowProc()

WindowProc()

发送消息到OnWndMsg(),如果未被处理,则调用DefWindowProc()

OnWndMsg()

按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand();

对于WM_NOTIFY消息,调用OnNotify(),OnWndMsg()搜索类的消息映像,

以找到一个能处理消息的处理函数,如果OnWndMsg()不能找到这样一个函数,则将消息返回给WindodProc(),由它将消息发到DefWindowProc()

OnCommand()

Oncommand()查看这是不是一个控件通知(lParam是不是空的),如果它是,OnCommand()试图将消息映射到制造通知的控件,如果它不是则调用OnWndMsg().

OnNotify()

OnNotify()也试图将消息映射到制造通知的控件,如果映射不成功,则调用OnWndMsg()返回。

OnCmdMsg()

根据接受消息的类,OnCmdMsg()将在一个称为命令传递的过程中潜在的传递命令消息和控件通知。如果该窗口的类是一个框架类,则命令消息和通知也被映射到视图和文档类中,并为该类寻找消息处理函数。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值