MFC的消息传递机制

    今天又研究了一下MFC的消息传递机制,发现MFC的消息传递也没那么复杂。简单的就是那么几个要点:

1、用宏定义了一个消息表,每个类一张表,父类子类通过指针连接,构成一个消息网。表里面每项就定义了消息号、ID号和函数执行入口及函数参数形式。得到一个消息,就和表里面的项比较,消息一样的就执行对应的函数。

2、每个窗口必须有个窗口消息处理函数,而MFC中CWND封装了一个窗口消息处理函数,凡是CWND派生的,都调用那个窗口消息处理函数。而这个窗口消息处理函数,调用了两个函数,一个是处理我们想处理的消息,叫窗口函数A,一个是处理我们不处理的消息,给系统default处理的,叫窗口函数B。 

3、诸多从CWND派生出来的类,都改写了CWND的窗口消息处理函数中的窗口函数A,于是在不同的派生类中,都执行我们改写过的窗口函数A,我们就可以随便把消息绕来绕去了。而且因为派生类的窗口函数A名称都一样的,所以我们只要获得其它派生类的指针,调用它的窗口函数A,就把消息绕到那个类上面了。

消息绕行部分说白了就是虚函数的妙用。

当然,还有个什么HOOK,在某些情况下发过来的消息,都会给hook指定的函数过滤执行一些动作,这个俺就是不太懂了。

不过我发现,在Doc/View结构中,最底层的CCmdTarget的消息处理部分给重复调用了好多次。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值