对于windows程序 ,无非是消息循环 和 窗口过程的消息处理。
无论是MFC 或者是WTL ,都只是内部封装,搞清楚这个过程 对于掌握框架,甚至自己制作框架都有好处。
前段时间已经分析了一下WTL的, 关于MFC的框架,侯杰的 深入浅出MFC讲的比较细致。很到位,作为想把MFC彻底搞清楚的人 ,不应该去拒绝这本书。
MFC实现了自己的RTTI, 当时因为C++的标准 还没有RTTI这个功能,所以MFC自己写了一个, 用的实际上也就是个链表,消息映射 也是链表,那几个奇怪的宏就一个RTTI的宏 和一个 消息映射宏 两大类。
消息映射宏 是为了取代虚函数, WTL的模板实现也是为了取代虚函数,虚函数带来很大的内存开销。 所以这两个框架为了性能, 都尽量的避免了虚函数, 如果没有 virtual 关键字, 那么C++和C的性能几乎没什么区别了。
MFC主要是用的钩子去 处理的消息循环,有人说不能跨线程去处理UI,我不知道为什么这么说, 但是MFC本身的架构确实这样子干了, 开线程,挂钩子。处理消息循环。
在CWnd的createex就是所以创建窗口的源头。