在开始 WTL 之前,首先配置你的开发环境,我假设你已经安装好 VS2005 或者其它版本的开发环境,最新的 WTL 可以从这里得到:
http://sourceforge.net/project/showfiles.php?group_id=109071&package_id=321560&release_id=680959 。
下载完毕,安装之后,可以开始配置你的开发环境:打开你的安装目录,进去到 AppWiz 目录,根据你的开发环境,运行相应的 *js 脚本文件(例如我的是 VS2005 ,我就运行 setup80.js ,如果你的是 Express 版本,则应该运行带有 X 的脚本文件),之后,将 include 文件夹添加到你的开发环境的头文件搜索目录,很多开发库还需要将 lib 文件夹添加到库目录,但 WTL 不需要,它的所有文件都是以源码的形式提供的,这一点主要是因为它的绝大部分类库都是用 C++ 类模板编写的,这一特性使得它不能对外提供链接文件(这一点也可能是微软不愿意开放 WTL 的原因之一)。如果你是要在 WinCE 或 WinMobile 环境下使用 WTL ,另外两个文件夹 AppWizCE 和 AppWizMobile 下的文件和 AppWiz 中文件的作用一样,你只需按上面的方法进行配置。
另外,一个很好的插件推荐给你:VisualFC :
http://code.google.com/p/visualfc/
它可以为你的开发过程提供Wizard 的功能,以加快你的开发效率。
到这里,我有一个建议,你最好在 ./AppWiz/Files/Templates/1033 文件夹下的
Stdafx.h 文件的“ #endif // _WTL_SUPPORT_SDK_ATL3” 一行下修改原有的包含头文件,加上若干常用的头文件,修改后的包含文件看起来是这样的:
#include <atlapp.h>
#include <atlframe.h>
#include <atlctrls.h>
#include <atlcrack.h>
#include <atlctrlx.h>
#include <atlgdi.h>
#include <atlmisc.h>
#include <atlsplit.h>
#include <atlddx.h>
#include <atldlgs.h>
这可以免去你在开发过程中频繁的去添加那些需要的头文件,但是,这个办法有点土,常规的做法是修改 JS 脚本,根据不同的项目类型添加不同的头文件,但是我太懒了,况且这种做法也没什么不妥,安吧。
开发环境配置完毕,下面来开始我们的 WTL 之旅,我们来写一个“ Hello WTL ”的单文档程序:
1. 新建一个项目:在项目类型中选择 WTL ,模板中选择 ATL/WTL Aplication Wizard ,名称为: HelloWTL 。
2 .确定后,继续下一步,在 Application Type 页面中,选择 SDI Application ,勾选 A dd Common Controls Manifest 与 U nicode Character Set 。A dd Common Controls Manifest 选项可以使你的应用程序具有兼容的控件外观,例如可以在 Vista 操作系统中呈现出 Vista 的控件外观,而不是旧式的 Win95 外观。 U nicode Character Set 使得此项目使用Unicode 编码。
3. 单击Finish ,工程建立完毕。
查看工程生成的程序代码,它有三个类,CAboutDlg,CHelloWTLView,CMainFrame ,熟悉MFC 的一看,咦,怎么少了个CHelloWTMDoc ,是的,WTL 不支持文档/ 视图结构。
现在,我要在程序的客户区打印出“Hello WTL” 字样,在那里下手呢?
没错,你猜对了,当然是在CHelloWTLView 中,它提供一个 OnPaint 的函数,和 MFC 是如此的神似。我们在 OnPaint 加上一些代码,完成后的 OnPaint 如下:
LRESULT OnPaint (UINT /*uMsg*/ , WPARAM /*wParam*/ , LPARAM /*lParam*/ , BOOL & /*bHandled*/ )
{
CPaintDC dc (m_hWnd );
//TODO: Add your drawing code here
CRect rc ;
GetClientRect (&rc );
dc .TextOut (rc .Width ()/2,rc .Height ()/2,_T ("Hello WTL" ));
return 0;
}
好了,编译、运行,我们的第一个 Hello WTL 完成了。
下一章,我将通过剖析 WTL 的源代码,解析它的结构。