大家好,如何使用atl中的 CWindow, CwindowImpl类呢1. 由于我接到任务,维护,时间很紧,所以不可能看太多的书。真的没有太多时间。 只是想搞懂几个用法,概念.atl 的简单activex, com类,我多少会用一些吧。但是 从没使用过CWindow等类。我想知道,什么时候用,何时用?
2. 新建一个atl工程后, 就开始添加新的类了,此时面临很多选择。有简单atl对象(即非窗口com对象), atl对话框, atl控件。这3个我都一一试过, 均未出现cWindow类。
我到底该选择哪一个呢?3. 你们如果用atl开发一些窗体类,或者 控件类,你们使用的那些选项呢?我说的选项是指, 用类向导添加类的时候, 可以进行选择,不信的自己尝试。谢谢
2. 新建一个atl工程后, 就开始添加新的类了,此时面临很多选择。有简单atl对象(即非窗口com对象), atl对话框, atl控件。这3个我都一一试过, 均未出现cWindow类。
我到底该选择哪一个呢?3. 你们如果用atl开发一些窗体类,或者 控件类,你们使用的那些选项呢?我说的选项是指, 用类向导添加类的时候, 可以进行选择,不信的自己尝试。谢谢
顺便说一句:atl也好,wtl也好,技术不是我决定,很多底层已经写好了, 需要搞懂,维护之。我不知道,为什么他们的代理出现了窗体呢,为什么我猜测这个dll是atl呢简单的 atl对象这种我是学过的,看到那些dll出现这些东西, 基本就可以断定是采用atl开发的了。另外 出现大量idispatch之类。所以是如此判断的。到底如何做,才能够 出现窗体呢?我发个截图吧,
ATL对窗口应用做了最基础的封装,直接使用不太方便,通常要借助于WTL。
ATL对窗口的封装分成两个层次,一种是对API的封装类,即对窗口句柄的操作封装,最基础的是CWindow,它封装的是通用窗口处理,大部分窗口API都被CWindow封装好了,但ATL只提供了这个基础封装。WTL扩展了其它类型的控件窗口封装,比如CStatic/CButton/CListViewCtrl/CTabCtrl/...等等,用于操作不同类型的窗口,但它们都是从CWindow派生的。这些都是简单封装,仅方便窗口的操作。
另一个层面的封装就是CWindowImpl/CDialogImpl,以及从它们延伸出来的其它封装类,这类封装才是真正的框架,如果你需要自定义窗口(比如响应消息、自定义窗口风格等等),你的窗口类必须从这些类派生,消息路由、THUNK技术的窗口过程等功能框架已经帮你准备好了,你直接像MFC那样用宏填表就能响应消息了。再说一点,作为框架的CWindowImpl/CDialogImpl等都是模板类,仔细看看它们的模板参数,你会发现有一个参数的默认值就是CWindow,也就是说,这些类全部是从CWindow派生的,你说的未出现CWindow是不对的。为什么把它作为模板参数呢,因为你可以很容易地更改这个默认基类,比如你要自定义一个STATIC控件,那么你可以让你的窗口从CStatic派生,而不是默认的CWindow,只需要这样定义:
class CMyStatic : public CWindowImpl<CMyStatic, CStatic, xxx>
{};
红色的CStatic就是指定基类的,以前默认可是CWindow哦,显然不符合你的要求,所以直接替换基类。最后总结一句话,ATL/WTL的所有窗口类,包括你自己实现的窗口类,最终都是从CWindow派生的。