其实对于windows下的编程 无非是 创建窗口 和 消息循环。就这两个地方 你搞清楚了 就ok了。
在WTL的实现中,它的消息映射宏写的比较简单,如果你的窗口类(包括控件)里面
写下来DECLARE_WND_SUPERCLASS(_T(“XXX"), CListViewCtrl::GetWndClassName())类似的语句的话
其实就是 定义了一个窗口信息,一个定义窗口信息的宏,如果你不写这一句 也没事,父类 你所继承的
CWindowImpl类 这个类 也有这个宏,这个是WTL库自己写的。
说白了 当你create 窗口之前, 一定会去注册窗口 从而指定回调的,WTL用的是这句话T::GetWndClassInfo().Register(&m_pfnSuperWindowProc);
这句话 说白了 T代表你的窗口 或者空间类,一看就知道是注册窗口, 在WTL中 注册窗口指定的回调函数是
StartWindowProc 这个函数最终会执行 WindowProc函数的 ProcessWindowMessage;
这个ProcessWindowMessage 函数正是 你的窗口(控件)类的 消息映射宏,说白了 就是个switch语句
跟win32 那个原始程序的switch 语句差别不大。 可以说一样滴。
于是创建窗口 ,显示窗口基本上就是这个套路了, 让控件得以显示 ,无非就是通过DDX去绑定,这个时候 控件是拖上去的, 还一种就是你去直接create。 如果是DDX的 实际上调用的是 Subclasswindow,这个函数说白了就是给控件一个窗口过程函数而已。
大道不过三两行,说穿不值一文钱。 WTL的源码比MFC的要简洁一些。 虽然UI封装的少,但是没有大碍,如果WTL用时间长了 你会觉得 比MFC更舒服,实际上MFC提供的文档视图结构 基本上 大部分人 都没用到,很多做界面开发的 更本不需要这个。