Windows Template Library (WTL)相关资料学习

 

初识 WTL( )
作者: orange

 

下载本文示例工程

 

 

1 .前言

 

虽然 MFC 的功能很强大,但 Windows Template Library(WTL) 的出现,无疑说明了 MFC 有一定的弊病。和 MFC 相比,功能并没有 MFC 完善。比如 MFC 支持 doc/view 架构,而 WTL 不支持。同时, WTL 也没有 Microsoft 的官方支持。但是, WTL 是基于模版 (template) 的,其应用程序最小只有 24KB ,同时不象 MFC ,依赖 DLL 。但是 WTL 也实现了 CStringCRectCSizeCPoint 等常用的类,还 CStaticT<TBase>CButtonT<TBase>CListBoxT<TBase> CComboBoxT<TBase>( 这些在 WTL 库文件 atlctrls.hatlctrlw.hatlctrlx.h 中就能看到 ) 用起来和 MFC 版本也没太大不同。

 

2 .准备工作

 

首先安装 WTL AppWizard, 现在最高版本应该是 WTL7.0, 直接运行 setup 脚本文件就可以了 , 这里给大家几个下载地址 :

 

1) http://www.vckbase.com/tools/listtools.asp?tclsid=111

 

2)http://www.microsoft.com/downloads/details.aspx?familyid=128e26ee-2112-4cf7-b28e-7727d9a1f288&displaylang=en

 

3) http://www.copathway.com/vchelp/zsrc/wtlm.asp?type_id=70&class_id=1&cata_id=3&article_id=374

 

这样当你启动 VC6.0 后, File/New 时,在 Project 属性页就能看到添加了一项 ATL/WTL AppWizard 。你可以直接把 WTL 的库文件 ( 16.h 文件 ) 拷贝到 vc 的安装目录 VC98/Include 中,也可以放到你的工程文件夹中。

 

3 .应用实例 1---SDI 中状态栏的应用

 

(1) File/New, 如图:

 

<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:431.25pt;height:317.25pt'> <v:imagedata src="file:///C:\DOCUME~1\JACKY_~1\LOCALS~1\Temp\msohtml1\01\clip_image002.gif" o:href="http://www.vckbase.com/document/journal/vckbase22/images/TestWTL2.gif"/> </v:shape><![endif]--><!--[if !vml]--> <!--[endif]-->

 

(2) OK 后,

 

SDI(Single Document Interface) 应用程序通常只有一个主窗口 ( 通常是一个框架窗口, Frame Window) 。框架窗口包含菜单、工具栏、状态栏和称为视 (View) 的客户工作区。

 

Multip-SDI(Multiple Threads SDI) ,就像 IE 浏览器,使用 " 文件 / 新建 / 窗口 " 命令后,会出现另一个 IE 窗口。

 

MDI(Multiple Document Interface) 应用程序有一个主框架窗口,但有多个子框架窗口。每个子窗口都有自己的视 (View),MFC 的相似。

 

Dialog 应用程序是基于对话框的。

 

<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" alt="" style='width:378pt;height:280.5pt'> <v:imagedata src="file:///C:\DOCUME~1\JACKY_~1\LOCALS~1\Temp\msohtml1\01\clip_image003.png" o:href="http://www.vckbase.com/document/journal/vckbase22/images/TestWTL3.gif"/> </v:shape><![endif]--><!--[if !vml]--> <!--[endif]-->

 

(3) Next

 

<!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" alt="" style='width:378pt;height:4in'> <v:imagedata src="file:///C:\DOCUME~1\JACKY_~1\LOCALS~1\Temp\msohtml1\01\clip_image005.png" o:href="http://www.vckbase.com/document/journal/vckbase22/images/TestWTL4.gif"/> </v:shape><![endif]--><!--[if !vml]--> <!--[endif]-->

 

(4) 在产生的文件中可以看到 WTL 确实不支持 Doc/View.

 

WTL 对单界面线程的封装: WTL 使用一个 _Module 全局变量来保存全局数据,并通过它来引用应用程序级的代码。在 WTL 中,该变量是 CAppModule 的实例,想象 MFCtheApp

 

下面对 MyTestWTL.cpp 文件中的函数作一些说明:

 

 

int WINAPI _tWinMain ( HINSTANCE hInstance , HINSTANCE /*hPrevInstance*/ , LPTSTR lpstrCmdLine , int nCmdShow )

 

{

 

HRESULT hRes = :: CoInitialize ( NULL );

 

// If you are running on NT 4.0 or higher you can use the following call instead to

 

// make the EXE free threaded. This means that calls come in on a random RPC thread.

 

// HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);

 

 

ATLASSERT ( SUCCEEDED ( hRes ));

 

 

// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used

 

:: DefWindowProc ( NULL , 0 , 0 , <chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="l" w:st="on"><span style="color: purple;">0L</span></chmetcnv>);

 

AtlInitCommonControls ( ICC_COOL_CLASSES | ICC_BAR_CLASSES ); // add flags to support other controls

 

hRes = _Module . Init ( NULL , hInstance );

 

ATLASSERT ( SUCCEEDED ( hRes ));

 

int nRet = Run ( lpstrCmdLine , nCmdShow ); // 程序逻辑,调用全局函数 Run()

 

_Module . Term (); // 终止模块

 

 

:: CoUninitialize ();

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值