atl 窗口类源代码学习笔记
【程序编程相关:(转载)关于Windows下ShellC】 【推荐阅读:WIN2000下的系统进程名称列表】 【扩展信息:你好,LOG4NET】 本文是自己学习源代码的总结,在写作过程与察看代码寻找资料的时候,找到了些文章. 可参考: wtl流程分析-初稿 atl中的thunk机制学习 1,cwindow atl有一个专门为窗口设计的基础类,可以做全部的窗口操作,这就是cwindow.它实际上就是对hwnd操作的一个包装类,对几乎所有以hwnd句柄为第一个参数的窗口api的进行了封装,例如:setwindowtext() 与 destroywindow().cwindow类有一个公有成员m_hwnd,使你可以直接对窗口的句柄操作,cwindow还有一个操作符hwnd,可以将cwindow对象传递给以hwnd为参数的函数. cwindow是一个普通的c++类.创建一个cwindow对象占用很少的资源,因为只有一个数据成员. 2,cwindowimpl继承树 在atl类中对窗口过程的实现是cwindowimpl.cwindowimpl 含有所有窗口实现代码,例如:窗口类的注册,窗口的子类化,消息映射以及基本的windowproc()函数. 我们先追根溯源,看看其继承过程: 一般来说,我们需要定义一个自己的窗口,首先就从cwindowimpl继承而来. class cmywnd : public cwindowimpl; template class atl_no_vtable cwindowimpl : public cwindowimplbaset; template class atl_no_vtable cwindowimplbaset : public cwindowimplroot; template class atl_no_vtable cwindowimplroot : public tbase, public cmessagemap; class atl_no_vtable cmessagemap { public: virtual bool processwindowmessage(hwnd hwnd, uint umsg, wparam wparam, lparam lparam, lresult& lresult, dword dwmsgmapid) = 0; }; 2.1,cmessagemap 该类是一个纯虚类,主要目的是提供对windows消息的处理接口.... 下一页