消息映射机制

来源:互联网 发布:聊天表情制作软件 编辑:程序博客网 时间:2024/05/17 01:04

   跟框架机制一样 也是寻寻觅觅了很久。。到最后知道的真想骂一句:低俗。。

 

 

现在说机制吧。。有个虚函数GetMessageMap在

 

CWnd和CCmdTarget都有定义(利用DECLARE_MESSAGE_MAP())。

和一个非虚函数GetThisMessageMap。

 

大家都还记得BEGIN_MESSAGE_MAP(theClass, baseClass)这个宏吧。。

 

example:我定义了一个类CXXOO继承CWnd。打算重写OnCreate(处理wm_create消息),那么就需要在类声明处放置DECLARE_MESSAGE_MAP(),定义处放置BEGIN_MESSAGE_MAP(CXXOO, CWnd)和END_MESSAGE_MAP(),把ON_WM_CREATE()

放置在2个宏中间 以上都是废话~~

example2:未重写~~

好,现在要处理了wm_create了。如example调用GetMessageMap时会调用CXXOO重写的那个,然后在theClass:: GetThisMessageMap的一个静态数组_messageEntries中找到了wm_create,继而调用你重写的OnCreate。如example2调用GetMessageMap依然调用CXXOO重写的,但确找不到,那就去找baseClass:: GetThisMessageMap中的那个静态数组,按继承图从下往上。(CCmdTarget应该没怎么定义,大部分的映射项应该都放在CWnd里。)

 

但微软在MFC里面加了个缓存机制,这是我们用win32API编写Windows程序时不会写的。。有机会再看那个怎么实现的吧就这样了。。

 

原创粉丝点击