急寻高手帮我解答一个atl中的Cwindow的问题,我要失业了

liulin2025 2012-11-17 11:03:16
大家好,如何使用atl中的 CWindow, CwindowImpl类呢

1. 由于我接到任务,维护,时间很紧,所以不可能看太多的书。

真的没有太多时间。 只是想搞懂几个用法,概念.

atl 的简单activex, com类,我多少会用一些吧。

但是 从没使用过CWindow等类。

我想知道,什么时候用,何时用?


2. 新建一个atl工程后, 就开始添加新的类了,此时面临很多选择。

有简单atl对象(即非窗口com对象), atl对话框, atl控件。

这3个我都一一试过, 均未出现cWindow类。
我到底该选择哪一个呢?

3. 你们如果用atl开发一些窗体类,或者 控件类,你们使用的那些选项呢?

我说的选项是指, 用类向导添加类的时候, 可以进行选择,不信的自己尝试。

谢谢

...全文
175 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
redui 2012-11-19
  • 打赏
  • 举报
回复
ATL控件、ATL对话框、ATL属性页都是可以出现窗体的。其中只有ATL对话框是纯粹的窗体,跟COM无关,其它都是跟COM相关的。众所周知,ATL是一套为COM而生的框架,所以含COM内容是正常不过的事情。 下面说说窗体。 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派生的。
liulin2025 2012-11-17
  • 打赏
  • 举报
回复
liulin2025 2012-11-17
  • 打赏
  • 举报
回复


这是 vs2008,你的意思是,无论选择哪一个都没有窗体嘛?


顺便说一句:atl也好,wtl也好,技术不是我决定,很多底层已经写好了, 需要搞懂,维护之。

我不知道,为什么他们的代理出现了窗体呢,为什么我猜测这个dll是

atl呢

简单的 atl对象这种我是学过的,看到那些dll出现这些东西, 基本就可以断定是采用atl开发的了。

另外 出现大量idispatch之类。

所以是如此判断的。

到底如何做,才能够 出现窗体呢?




引用 2 楼 redui 的回复:
ATL的窗口框架过于基础,且默认向导中没有创建窗口类的项,用WTL吧,它基于ATL设计,扩充了ATL窗口类的功能,使用起来也很接近MFC的用法,但是比MFC灵活多了,而且有WTL向导,也有WTLHELPER插件帮你创建各种窗口类。


我发个截图吧,
redui 2012-11-17
  • 打赏
  • 举报
回复
ATL的窗口框架过于基础,且默认向导中没有创建窗口类的项,用WTL吧,它基于ATL设计,扩充了ATL窗口类的功能,使用起来也很接近MFC的用法,但是比MFC灵活多了,而且有WTL向导,也有WTLHELPER插件帮你创建各种窗口类。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧