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++ ,