MFC程序员WTL指南(2)ATL界面类

在你开始使用WTL或着在本文章的讨论区张贴消息之前,我想请你先阅读下面的材料。

你需要开发平台SDK(Platform SDK)。你要使用WTL不能没有它,你可以使用在线升级安装开发平台SDK,也可以下载全部文件后在本地安装。在使用之前要将SDK的包含文件(.h头文件)和库文件(.Lib文件)路径添加到VC的搜索目录,SDK有现成的工具完成这个工作,这个工具位于开发平台SDK程序组的“Visual Studio Registration”文件夹里。

你需要安装 WTL。你可以从微软的网站上下载WTL的7.0版,(*编辑注:WTL也可以到VC知识库http://www.vckbase.com/tools下载) 在安装之前可以先查看“Introduction to WTL - Part 1”和“Easy installation of WTL”这两篇文章,了解一下所要安装的文件的信息,虽然现在这些文章有些过时,但还是可以提供很多有用的信息。有一件我认为不该在本篇文章中提到的事是告诉VC如何搜索WTL的包含文件路径,如果你用的VC6,用鼠标点击 Tools\Options,转到Directories标签页,在显示路径的列表框中选择Include Files,然后将WTL的包含文件的存放路径添加到包含文件搜索路径列表中。

你需要了解MFC。很好地了解MFC将有助于你理解后面提到的有关消息映射的宏并能够编辑那些标有“不要编辑(DO NOT EDIT)”的代码而不会出现问题。

你需要清楚地知道如何使用Win32 API编程。如果你是直接从MFC开始学习Windows编程,没有学过API级别的消息处理方式,那很不幸你会在使用WTL时遇到麻烦。如果不了解Windows消息中WPARAM参数和LPARAM参数的意义,应该明白需要读一些这方面的文章(在CodeProject有大量的此类文章)。

你需要知道 C++ 模板的语法,你可以到VC Forum FAQ 相关的连接寻求答案。

我只是讨论了一些涵盖VC 6的特点,不过据我了解所有的程序都可以在VC 7上使用。由于我不使用VC 7,我无法对那些在VC 7中出现的问题提供帮助,不过你还是可以放心的在此张贴你的问题,因为其他的人可能会帮助你。

对本系列文章的总体介绍

WTL 具有两面性,确实是这样的。它没有MFC的界面(GUI)类库那样功能强大,但是能够生成很小的可执行文件。如果你象我一样使用MFC进行界面编程,你会觉得MFC提供的界面控件封装使用起来非常舒服,更不用说MFC内置的消息处理机制。当然,如果你也象我一样不希望自己的程序仅仅因为使用了MFC的框架就增加几百K的大小的话,WTL就是你的选择。当然,我们还要克服一些障碍:

  • ATL样式的模板类初看起来有点怪异
  • 没有类向导的支持,所以要手工处理所有的消息映射。
  • MSDN没有正式的文档支持,你需要到处去收集有关的文档,甚至是查看WTL的源代码。
  • 买不到参考书籍
  • 没有微软的官方支持
  • ATL/WTL的窗口与MFC的窗口有很大的不同,你所了解的有关MFC的知识并不全部适用与WTL。

从另一方面讲,WTL也有它自身的优势:

  • 不需要学习或掌握复杂的文档/视图框架。
  • 具有MFC的基本的界面特色,比如DDX/DDV和命令状态的自动更新功能(译者加:比如菜单的Check标记和Enable标记)。
  • 增强了一些MFC的特性(比如更加易用的分隔窗口)。
  • 可生成比静态链接的MFC程序更小的可执行文件(译者加:WTL的所有源代码都是静态链接到你的程序中的)。
  • 你可以修正自己使用的WTL中的错误(BUG)而不会影响其他的应用程序(相比之下,如果你修正了有BUG的MFC/CRT动态库就可能会引起其它应用程序的崩溃。
时间: 2024-10-28 04:39:16

MFC程序员WTL指南(2)ATL界面类的相关文章

MFC程序员WTL指南(1)中文版序言

我一直在寻找这样一个类库:他对Windows的窗口提供面向对象的封装,有灵活的消息响应机制和比较完备的界面框架解决方案,对标准控件提供简练实用的封装,支持操作系统的新特性,支持功能扩充和二次开发,有代码自动生成向导机制,生成的程序使用较少的系统资源,最后是有完全的代码支持和文档支持. 你会说那就用MFC吧! 是的,我一直使用MFC,但我对MFC已经越来越厌倦了.陈旧的类库使得它无法支持操作系统的新特性(MFC的类库从4.21版之后就没有更新了,而那时是1998年,人们使用Windows 95和w

MFC程序员WTL指南(5)对话框与控件

对第四章的介绍 MFC 的对话框和控件的封装真得可以节省你很多时间和功夫.没有MFC对控件的封装,你要操作控件就得耐着性子填写各种结构并写很多的SendMessage调用.MFC还提供了对话框数据交换(DDX),它可以在控件和变量之间传输数据.WTL 当然也提供了这些功能,并对控件的封装做了很多改进.本文将着眼于一个基于对话框的程序演示你以前用MFC实现的功能,除此之外还有WTL消息处理的增强功能.第五章将介绍高级界面特性和WTL对新控件的封装. 回顾一下ATL的对话框 现在回顾一下第一章 提到

MFC程序员WTL指南(3)WTL界面基类

对第二部分的介绍 好了,现在正式开始介绍WTL!在这一部分我讲的内容包括生成一个基本的主窗口和WTL提供的一些友好的改进,比如UI界面的更新(如菜单上的选择标记)和更好的消息映射机制.为了更好地掌握本章的内容,你应该安装WTL并将WTL库的头文件目录添加到VC的搜索目录中,还要将WTL的应用程序生成向导复制到正确的位置.WTL的发布版本中有文档具体介绍如何做这些设置,如果遇到困难可以查看这些文档. WTL 总体印象 WTL的类大致可以分为几种类型: 主框架窗口的实现- CFrameWindowI

MFC程序员WTL指南(8)分隔窗口

介绍 随着使用两个分隔的视图管理文件系统的资源管理器在Windows 95中第一次出现,分隔窗口逐渐成为一种流行的界面元素.MFC也有一个复杂的功能强大的分隔窗口类,但是要掌握它的用法确实有点难,并且它和文档/视图框架联系紧密.在第七章我将介绍WTL的分隔窗口,它比MFC的分隔窗口要简单一些.WTL的分隔窗口没有MFC那么多特性,但是易于使用和扩展. 本章的例子工程是用WTL重写的ClipSpy,如果你对这个程序不太熟悉,现在可以快速浏览一下本章内容,因为我只是复制了ClipSpy的功能而没用深

MFC程序员WTL指南(4)工具条与状态条

对第三部分的介绍 自从作为Windows 95的通用控件出现以来,工具条和状态条就变成了很普遍的事物.由于MFC支持浮动的工具条从而使它们更受欢迎.随着通用控件的更新,Rebars(最初被称为Coollbar)使得工具条有了另一种展示方式.在第三部分,我将介绍WTL对这些控制条的支持和如何在你的程序中使用它们. 主窗口的工具条和状态条 CFrameWindowImpl有三个HWND类型的成员变量在窗口创建时被初始化,我们已经见过m_hWndClient,它是填充主窗口客户区的"视图"窗

MFC程序员WTL指南(7)包容ActiveX控件

介绍 在第六章,我将介绍ATL对在对话框中使用ActiveX控件的支持,由于ActiveX控件就是ATL的专业,所以WTL没有添加其他的辅助类.不过,在ATL中使用ActiveX控件与在MFC中有很大的不同,所以需要重点介绍.我将介绍如何包容一个控件并处理控件的事件,开发ATL应用程序相对于MFC的类向导来说有点不方便.在WTL程序中自然可以使用ATL对包容ActiveX控件的支持. 例子工程演示如何使用IE的浏览器控件,我选择浏览器控件有两个好处: 每台计算机都有这个控件,并且 它有很多方法和

MFC程序员WTL指南(9)属性页与向导

介绍 甚至在成为Windows 95的通用控件之前,使用属性表来表示一些选项就已经成为一种很流行的方式.向导模式的属性表通常用来引导用户安装软件或完成其他复杂的工作.WTL对这两种方式的属性表都提供了很好的支持,可以使用前面介绍的与对话框相关的特性,如DDX和DDV.在本章我将演示如何创建一个基本的属性表和向导,如何处理属性页发送的通知消息和事件. WTL 的属性表类 实现一个属性表需要CPropertySheetWindow和CPropertySheetImpl两个类联合使用,它们都定义在at

MFC程序员WTL指南(6)高级对话框用户界面类

第五章介绍 在上一篇文章我们介绍了一些与对话框和控件有关的WTL的特性,它们和MFC的相应的类作用相同.本文将介绍一些新类实现高级界面特性新类:控件自画和自定外观控件,新的WTL控件,UI updating和对话框数据验证(DDV). 特别的自画和外观定制类 由于自画和定制外观控件在图形用户界面中是很常用的手段,所以WTL提供了几个嵌入类来完成这些令人厌烦的工作.我接着就会介绍它们,事实上我们在上一个例子工程ControlMania2的结尾部分已经这么做了.如果你正随着我的讲解用应用程序生成向导

mfc-最近觉得自己写的MFC程序好丑,怎么美化界面呀

问题描述 最近觉得自己写的MFC程序好丑,怎么美化界面呀 如题,老师说我们写的 MFC程序太丑,想要我们做好看点,怎么弄哇 解决方案 可以使用一些第三方的库,google(每个分号为一个搜索目标) MFC换肤.MFC金山UI.BCGControlbar等. 解决方案二: 程序丑和界面丑是两个概念,界面丑的话,可以用第三方库,可以写一些美化窗口的类加载到你写的界面里面,相当与覆盖.还可以做个图片代替界面 解决方案三: 估计是版本比较老吧,比如我用的就是VC6.0+MFC4.2,界面确实比较老,适合