存档
经过改装的 ATLTRACE 宏
MFC 程序员的 WTL 教程 ( 1 ) — ATL 中的 GUI 类
第一部分 – ATL 中的 GUI 类
使用 ATL 的包含窗口 CContainedWindowT 类
ATL 使用 CContainedWindowT 实现包含的窗口。包含的窗口表示将消息委托给容器对象,而不是在自己的类中处理它们的窗口。
注意 不需要从 CContainedWindowT 派生类,就可以使用包含的窗口。
使用包含的窗口,可以为现有 Windows 类创建超类,或者为现有窗口创建子类。
若要为现有 Windows 窗口类创建超类的窗口,应首先在 CContainedWindowT 对象的构造函数中指定现有类的名称。然后调用 CContainedWindowT::Create。
若要为现有窗口创建子类,不需要指定 Windows 类名(将 NULL 传递给构造函数)。只需使用为其创建子类的窗口的句柄调用 CContainedWindowT::SubclassWindow 方法。
通常将 “包含窗口” 用作容器类的数据成员。容器不需要是窗口;但是,它必须从 CMessageMap 派生。
包含的窗口可以使用替换消息映射来处理它的消息。如果有多个包含的窗口,应声明多个替换消息映射,每个对应一个单独的包含的窗口。
阅读全文…
能用于 VC6 的 CImage 类
对于图像操作,在遥远的计算机蛮荒时代,我们一般使用 CBitmap 类,这个类在 MFC 和 WTL 上均有实现。至于 DIB 格式的图像,以及文件存盘的操作,CBitmap 类就无能为力了。我们只能求助于自己来实现或者用别人实现的类了。
时代总是进步的,到 VC7 以后了,ATL 框架内增加了一个 CImage 类,基本上完成了上述的述求。但顽固如我等人,却一定要在 VC6 的圈子里混(因为编译出来的可执行文件不用带一大堆什么.Net框架,什么带manifest的古怪东东,又是什么神秘的特定版本的运行时DLL等等,我只想我的简单程序能顺畅的运行在所有的 Windows 平台上,如此而已),就开始倒行逆施的改造了 CImage 类了,改造如下。
这个类用到了 CString 类,这就必须要 WTL 才能工作,当然 MFC 框架应该也能。
还用到了 GDIplus,因此您最好还要下载能支持 VC6 的最后版本的 Platform SDK,且将 VC6 打上 SP6 补丁才能用。
阅读全文…
基于 ATL 的服务的框架
用 ALT 向导生成的服务的框架其实并不好驯服, 俺在上面吃了不少苦头, 因此俺在自动生成代码上做了不少修正和扩展, 现在好使了,
包括 Debug 版本的调试中断点, 用户逻辑的入口点, 也可以双击直接运行, 这时就是一个普通的应用程序. 使得编写服务就跟编普通应用程序没有区别.
如果要将此代码用于开发其他服务时, 只需要更改两个地方:
- 搜索字符串 AutoDomain , 将其替换成你想要的服务名
- 用 guidgen 生成一个新的 GUID, 将变量 g_szkeyAppID 内的 GUID 字符串替换掉
我的框架的代码包含了一个完整的可运行的例子服务, 下载地址是:
AutoDomain1
另一个例子: bestcock
实现一个将 IP 地址控件的 disabled 状态
用 ATL/WTL 实现 DropTarget(转载)
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 步完成拖放支持
阅读全文…

近期评论