WTL的框架粗略概况

  其实对于windows下的编程 无非是 创建窗口 和 消息循环。就这两个地方 你搞清楚了 就ok了。

   在WTL的实现中,它的消息映射宏写的比较简单,如果你的窗口类(包括控件)里面 

写下来DECLARE_WND_SUPERCLASS(_T(“XXX"), CListViewCtrl::GetWndClassName())类似的语句的话 

 其实就是 定义了一个窗口信息,一个定义窗口信息的宏,如果你不写这一句 也没事,父类 你所继承的

  CWindowImpl类 这个类 也有这个宏,这个是WTL库自己写的。

       当你create 窗口之前, 一定会去注册窗口 从而指定回调的,WTL用的是这句话T::GetWndClassInfo().Register(&m_pfnSuperWindowProc);

   这句话 T代表你的窗口 或者空间类,一看就知道是注册窗口, 在WTL中 注册窗口指定的回调函数是

StartWindowProc  这个函数最终会执行 WindowProc函数的 ProcessWindowMessage;  这个地方的细节 涉及到 

thunk技术。这个的具体实现 可以看 atlwin.h的

template <class TBase, class TWinTraits>
LRESULT CALLBACK CWindowImplBaseT< TBase, TWinTraits >::StartWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

这里面可以查到 具体实现。

   这个ProcessWindowMessage 函数正是 你的窗口(控件)类的  消息映射宏, 就是个switch语句

跟win32 那个原始程序的switch 语句差别不大。 可以说一样滴。

    于是创建窗口 ,显示窗口基本上就是这个套路了, 让控件得以显示 ,无非就是通过DDX去绑定,这个时候 控件是拖上去的, 还一种就是你去直接create。   如果是DDX的 实际上调用的是 Subclasswindow,这个函数说白了就是给控件一个窗口过程函数而已。  


     大道不过三两行,说穿不值一文钱。  WTL的源码比MFC的要简洁一些。 虽然UI封装的少,但是没有大碍,如果WTL用时间长了 你会觉得 比MFC更舒服,实际上MFC提供的文档视图结构 基本上 大部分人 都没用到,很多做界面开发的 更本不需要这个。


        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值