当前位置:编程学习 > C/C++ >>

MFC消息映射机制

C++中的多态大大简化了编程,使得程序的抽象性更高,但是在MFC这样一个庞大的类库中,如果消息的传递采用多态机制,将在每个类中引入大量的虚表,不适用,因此MFC中的消息传递采用消息映射机制,记住,这就叫消息映射,不是别的。
 
使用class wizard自动生成的代码中,和消息映射直接相关的语句是
 
[cpp]  
DECLARE_MESSAGE_MAP()  
[cpp] view plaincopy
BEGIN_MESSAGE_MAP(CDeawView,CView)  
ON_WM_LBUTTONDOWN()  
.......  
ON_COMMAND(ID_FILE_PRINT,CView::OnfilePrint)  
END_MESSAGE_MAP()  
这两句构建了一个伟大的数据结构--MFC消息映射路由。这些宏的具体的代码,有兴趣的读者可以刨根问底一下,我下面说说他们的作用吧,毕竟总结是一种重要的学习方法。它们的作用:DECLARE_MESSAGE_MAP为该类申明了记录消息的框架,框架中每个元素由BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间的内容填充,结果是产生了一个消息映射表。
内存中的映射表可视化表示可以参考侯捷《深入浅出MFC》Page417,这个庞然大物再次向我们昭示了其实,内存映射表是个巨大的数据结构而已,用来为诸如WM_PAINT这样的消息决定流动路线。
 
在我们C++程序员的眼里,虚函数是实现多态的完美方式,但是,永远不要认为虚函数就是唯一,MFC的消息映射机制里,各个类间消息映射表的穿针引线,同样为我们带来了多态的效果。这可能就叫做编程之美吧。
 
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,