您的位置:首页 >> 编程开发 >> Visual C++ >> ATL/COM/ActiveX >> 正文
RSS
 

ATL窗口(2)

http://www.rdxx.com 06年12月24日 14:47 互联网 我要投稿

关键词: ATL , 窗口

WTL窗口

(ATL窗口 第2部分)                  翻译:孙凯

---------------------------------------------------------------

这篇文章由Andrew Whitechapel所写。

---------------------------------------------------------------

下载代码12K

绪论

在我的第一篇文章中,我讲解了ATL的窗口类。文章带来了一个问题,关于从MFC移往ATL时缺少前台GUI支持的问题。这个争论的结果,产生了Microsoft Windows Template Library(WTL)。我会带你通过十分简单的步骤创建一个基于WTL的框架-视图应用程序,让你自己写出从MFC转向ATL的感受。

WTL是ATL的扩展,也是由ATL小组开发,包含在Microsoft于2000年1月发布的开发平台SDK包中(也可以从Microsoft网站上下载),虽然Microsoft没有正式支持。WTL通过提供一个用于编写Win32应用程序和控制的轻量级的框架,一些特殊的视图,GDI对象和实用的类,来扩展了ATL窗口类。

WTL包由750KB的窗口类库头文件,三个例子和一个Visual Studio WTL AppWizard组成。当然,它还要依靠有1MB大小ATL文件。

要安装WTL,你要做以下的工作:

将WTL目录中的内容复制到你指定的位置。

将WTL\include目录加入到VC++的头文件目录(include directories)列表中。

复制文件appwiz\atlapp60.awx到VC++的定制应用程序向导(Custom App Wizard)目录中,%VCDIR%\Common\MSDev98\Template,%VCDIR%即是安装VC++时指定的目录。

WTL设计特性--附带地,相对于MFC的优势--包括:

模板化,因此有较小的代码量。例如,一个简单的“hello world”SDI应用程序,基于WTL的程序只有24KB,而MFC静态连接结果是440KB,MFC动态连接的结果是24KB+1MB。

无太多相关性,并且可以自由地和SDK代码直接混合。

不会强迫使用特定的应用程序模型,尤其相对于MFC的应用程序框架。

WTL类包括:

标准控制(编辑框,列表框,按钮等等)

公共控制(包括列表视图,树形视图,进度条,微调按钮)

IE控制(rebar,平面滚动条,日历等等)

命令条,菜单,和更新UI类

公共对话框

属性单和页类

框架窗口,MDI框架和子框架,分隔条,可滚动的窗口

设备环境(DC)和GDI对象类(笔、刷子、位图等)

打印机及其信息和设备模式类

实用工具类:包括CPoint, CRect, CSize, 和CString类

WTL AppWizard允许你生成SDI、MDI、多线程SDI和基于对话框的应用程序。多线程SDI应用程序就象IE或Windows Explorer(我的电脑),看起来象是启动了多个实例,实质上它们是同一进程的多个视图。这些视图可以是普通的基于CWindowImpl的窗口,或基于窗体、列表框、编辑框、列表视图、树形视图、丰富文本编辑框或HTML控制。你可以让你的应用程序拥有rebar、命令条(如同Windows CE)、工具条或状态条。你的应用程序可以包含ActiveX控制,甚至可以是一个COM服务器。

Hello WTL

在这个练习中,我们将创建一个基于WTL的简单的"Hello World"应用程序。

创建一个新的WTL AppWizard应用程序。取名HelloWorld。在WTL AppWizard的第一步对话框中,接受所有默认选项,单击下一步按钮。第二步对话框中,也是保留所有默认选项(包含工具条、rebar、命令条、状态条和视图窗口),单击完成按钮。现在就编译运行该程序。你会看到一个非常普通的Win32应用程序,它有标准的框架窗口和视图、菜单、工具条、状态条,以及关于对话框。File|Exit, View|Toolbar, View|Statusbar, 和Help|About菜单项/工具条按钮可以工作,尽管其它的不能。而且,菜单中的某些菜单项具有相应的工具条按钮图标:

现在来分析代码。首先,你应该注意到,在_tWinMain函数中有一个标准的ATL CComModule全局变量,它执行了初始化和终止函数。分析_tWinMain函数,你会发现它所做的其它工作仅仅是初始化公共控件(通过调用InitCommonControlsEx函数)和调用全局函数Run(处理消息循环)。Run函数创建主框架窗口和CMessageLoop对象,调用主框架窗口的ShowWindow函数,然后调用CMessageLoop::Run函数。CMessageLoop::Run函数实质上是轮流调用GetMessage和DispatchMessage函数。

共4页  第1页 第2页 第3页 第4页

 
 
标签: ATL , 窗口 打印本文
 
 
  相关资讯
RSS
 
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站