存档

文章标签 ‘ATL’
1,223 views

ATL 的 IDispatch 功能再封装

2010年5月12日

ATL 自带的 CComDispatchDriver 功能太弱. 因此我从 MFC 的 COleDispatchDriver 里偷了点内容.拼凑成了以下 CAtlDispatchDriver 类, 用起来像极了 MFC 的 COleDispatchDriver, 也有 COleDispatchDriver 的方便. 以下是源代码.

代码及例子打包
阅读全文…

技术心得 , , ,

1,035 views

经过改装的 ATLTRACE 宏

2010年1月23日

由于 ATL 自带的 ATLTRACE 宏有个大问题, 要 dump 的字符串里不能带有中文字符. 否则将不能正确 dump 信息. 所以我重新写了这个宏. 用法同 ATLTRACE 宏.

  1. TB_TRACE_LINE 将会 dump 出源文件名称和行号以及你想输出的信息.
  2. TB_TRACE 将只会 dump 出你想知道的信息.

阅读全文…

技术心得 ,

1,067 views

ATL::CWindow 内的 GetTopLevelParent() 和 GetTopLevelWindow() 是不同的

2010年1月22日

今天偶然看到 ATL 内的这两个函数, 发现差别相当大.
GetTopLevelParent() 函数是严格的父子继承关系. 一层层的向上查找, 如果顶层窗口没有父窗口了, 即使有拥有者窗口也停止了.
而 GetTopLevelWindow() 函数则是到顶以后还会继续顺着 “拥有者窗口” 这条串链向上查找, 直到窗口既没有父窗口也没有拥有者了, 是 “终极” 的顶层窗口了, 才罢休.
阅读全文…

技术心得 , ,

1,582 views

MFC 程序员的 WTL 教程 ( 1 ) — ATL 中的 GUI 类

2010年1月4日
链接:下一部分

第一部分 – ATL 中的 GUI 类

本章内容

  • README.TXT
  • 本系列介绍
  • 第一部分介绍
  • ATL 背景知识
    • ATL 和 WTL 的历史
    • ATL 风格的模板
  • ATL 窗口类
  • 定义窗口实现
    • 填充消息映射
  • 高级消息映射链和嵌入(Mix-in)类
  • ATL EXE 的结构
    • VC 6 的情形
    • VC 7 的情形
  • ATL 中的对话框
  • 就要到 WTL 了,我保证!
  • 修订历史

README.TXT

在继续或者在本文的讨论板块中发布帖子之前,我希望你能先阅读以下内容。

本系列原来是为 VC 6 用户写的,介绍 WTL 7.0 的内容。现在 VC 8 已经出来了,我觉得也到了更新本系列来介绍 VC 7.1 的时候了。;)(不过,VC 7.1 的从 6 到 7 的自动转换工作并不是总能平滑地完成,所以 VC 7.1 的用户在试着使用示例源代码的时候可能会遭遇失败)因而,我将继续下去,持续更新本系列。文章将更新到可以反映 WTL 7.1 的特性,并会在下载的源代码中包括 VC 7.1 的工程。

针对 VC 2005 用户的重要提示:VC 2005 的 Express 版本并附带 ATL 或者 MFC,因此不能使用此版本编译 ATL 或者 WTL 工程。

阅读全文…

MFC 程序员的 WTL 教程, WTL , , ,

868 views

使用 ATL 的包含窗口 CContainedWindowT 类

2009年12月31日

ATL 使用 CContainedWindowT 实现包含的窗口。包含的窗口表示将消息委托给容器对象,而不是在自己的类中处理它们的窗口。

注意 不需要从 CContainedWindowT 派生类,就可以使用包含的窗口。

使用包含的窗口,可以为现有 Windows 类创建超类,或者为现有窗口创建子类。

若要为现有 Windows 窗口类创建超类的窗口,应首先在 CContainedWindowT 对象的构造函数中指定现有类的名称。然后调用 CContainedWindowT::Create。

若要为现有窗口创建子类,不需要指定 Windows 类名(将 NULL 传递给构造函数)。只需使用为其创建子类的窗口的句柄调用 CContainedWindowT::SubclassWindow 方法。

通常将 “包含窗口” 用作容器类的数据成员。容器不需要是窗口;但是,它必须从 CMessageMap 派生。

包含的窗口可以使用替换消息映射来处理它的消息。如果有多个包含的窗口,应声明多个替换消息映射,每个对应一个单独的包含的窗口。
阅读全文…

WTL, 技术心得 ,

3,850 views

能用于 VC6 的 CImage 类

2009年1月8日

对于图像操作,在遥远的计算机蛮荒时代,我们一般使用 CBitmap 类,这个类在 MFC 和 WTL 上均有实现。至于 DIB 格式的图像,以及文件存盘的操作,CBitmap 类就无能为力了。我们只能求助于自己来实现或者用别人实现的类了。

时代总是进步的,到 VC7 以后了,ATL 框架内增加了一个 CImage 类,基本上完成了上述的述求。但顽固如我等人,却一定要在 VC6 的圈子里混(因为编译出来的可执行文件不用带一大堆什么.Net框架,什么带manifest的古怪东东,又是什么神秘的特定版本的运行时DLL等等,我只想我的简单程序能顺畅的运行在所有的 Windows 平台上,如此而已),就开始倒行逆施的改造了 CImage 类了,改造如下。

这个类用到了 CString 类,这就必须要 WTL 才能工作,当然 MFC 框架应该也能。
还用到了 GDIplus,因此您最好还要下载能支持 VC6 的最后版本的 Platform SDK,且将 VC6 打上 SP6 补丁才能用。
阅读全文…

技术心得 , ,

620 views

基于 ATL 的服务的框架

2008年3月25日

用 ALT 向导生成的服务的框架其实并不好驯服, 俺在上面吃了不少苦头, 因此俺在自动生成代码上做了不少修正和扩展, 现在好使了,
包括 Debug 版本的调试中断点, 用户逻辑的入口点, 也可以双击直接运行, 这时就是一个普通的应用程序. 使得编写服务就跟编普通应用程序没有区别.

如果要将此代码用于开发其他服务时, 只需要更改两个地方:

  • 搜索字符串 AutoDomain , 将其替换成你想要的服务名
  • 用 guidgen 生成一个新的 GUID, 将变量 g_szkeyAppID 内的 GUID 字符串替换掉

我的框架的代码包含了一个完整的可运行的例子服务, 下载地址是:
AutoDomain1

svcdemo

另一个例子: bestcock

技术心得 , ,

695 views

实现一个将 IP 地址控件的 disabled 状态

2008年3月8日

要实现一个将 IP 地址控件的 disabled 状态, 但是 Windows 的实现就没有将控件的颜色灰掉,
M$ 真是的, 最后一步懒得弄了, 我只好自己弄咯. 下面是我的WTL,实现代码. BTW, 这个控件在
动态改变大小时, 里面的四个 EDIT 的大小没跟着改变, 我也懒得弄了 ;-)
阅读全文…

WTL, 技术心得 , ,

806 views

用 ATL/WTL 实现 DropTarget(转载)

2008年3月8日

http://kruglinski.blogchina.com/4609030.html

以一个DropTarget为例,我们都知道在MFC里有COleDropTarget实现OLE拖放目标端非常容易,
缺点 MFC 太臃肿近八年没有更新过了, 而且功能类与窗体类分离, 代码不够紧凑, 那么在
ATL/WTL 中要实现 DropTarget 也是非常的容易的, 而且更码更加紧凑完美, 完美的有点变
态,呵呵!

我觉得ATL小组的人曾经一定是些汇编语言狂热者,因为ATL的运行效率真的是太高了,非常高,
难以想象的高.(如果你偏不信可以用WTL向导一个空工程,Release编

译后再用反汇编工具反一下, 看看生成的代码质量如何, 特别是使用 VC6 以后版本的 VC++
编译器编译)

首先向导一个空的不带工具栏和状态栏的 WTL SDI 工程, Viwe type 选择 Edit 这样我们
会得到一个类似 Notepad 界面的程序, 然后分成 6 步完成拖放支持
阅读全文…

WTL, 技术心得 , ,