<html>
<head>
<title>WTL for MFC Programmers, Part III - Toolbars and Status Bars</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#33CCCC" text="#000000">
<p align="center"><b><font style="FONT-SIZE: 16pt" size="4" color="#0033CC">WTL
for MFC Programmers, Part IX - GDI Classes, Common Dialogs, and Utility Classes</font></b><br>
<br>
</p>
<p align="left">原作 :<b><font color="#CC3366">Michael Dunn</font></b> [<a href="http://www.codeproject.com/wtl/wtl4mfc9.asp">英文原文</a>]<br>
翻译 :<a href="mailto:inte2000@163.com">Orbit(桔皮干了)</a> [<a href="http://www.winmsg.com/cn/orbit.htm">http://www.winmsg.com/cn/orbit.htm</a>]</p>
<p align="left"><a href="demo/WTL4MFC9_demo.zip">下载演示程序代码</a></p>
<font face="Arial, Helvetica, sans-serif"></font>
<H2><font color="#FFFF66">本章内容</font></H2>
<UL>
<LI><A
href="#intro">介绍</A>
<LI><A
href="#gdiwrappers">GDI 封装类(wrapper
classes)</A>
<UL>
<LI><A
href="#wrapperscommon">封装类的通用函数(Common
functions)</A>
<LI><A
href="#usingcdct">使用 CDCT</A>
<LI><A
href="#mfcdifferences">与MFC封装类的不同之处</A>
</LI>
</UL>
<LI><A
href="#resourceloading">资源装载(Resource-Loading)函数</A>
<LI><A
href="#usingcommdlg">使用公共对话框</A>
<UL>
<LI><A
href="#usingcfiledialog">CFileDialog</A>
<LI><A
href="#usingcfolderdialog">CFolderDialog</A>
</LI>
</UL>
<LI><A
href="#miscstuff">其它有用的类和全局函数</A>
<UL>
<LI><A
href="#structwrappers">结构封装</A>
<LI><A
href="#dualtypedargs">双类型参数的自适应类</A>
<LI><A
href="#otherclasses">其它工具类</A>
<LI><A
href="#globalfuncs">全局函数</A>
<LI><A
href="#macros">宏</A> </LI>
</UL>
<LI><A href="#samplecode">例子项目</A>
<LI><A
href="#copying">版权和许可</A>
<LI><A
href="#revisionhistory">修订历史</A> </LI>
</UL>
<br>
<H2><A name=intro></A><font color="#FFFF66">对第九部分的介绍</font></H2>
<P>WTL还有很多封装类和工具类在本系列文章前八篇中并没有介绍,例如CString和CDC,WTL还提供了对GDI对象的良好封装,还包括一些有用的资源装载函数以及WIN32通用对话框的封装类,使得通用对话框更加容易使用。现在,在本文的第九篇中,我将介绍一些最常用的工具类。</P>
<P>本文将讨论以下内容:</P>
<OL>
<LI>GDI 封装类
<LI>资源装载(Resource-loading)函数
<LI>使用打开文件和选择文件夹的通用对话框
<LI>其它有用的类和全局函数</LI>
</OL>
<H2><A name=gdiwrappers></A><font color="#FFFF66">GDI 封装类</font></H2>
<P>WTL 使用了与MFC截然不同方式封装GDI对象,WTL的方法是为每种GDI对象设计一个模板类,每个模板都有一个名为t_bManaged的bool类型模板参数,这个参数控制着这些类是否“管理”(或拥有)它所封装的GDI对象。如果t_bManaged是false,表示这个C++对象并不管理GDI对象的生命周期,它只是围绕着这个GDI对象句柄的简单封装;如果t_bManaged是true,就产生了两点不同之处:</P>
<OL>
<LI><CODE>如果封装的句柄不为NULL,析构会调用DeleteObject()函数释放资源</CODE><code>。</code>
<LI><CODE>如果封装的句柄不为NULL,Attach()</CODE> 会在捆绑其它新句柄之前调用<CODE>DeleteObject()释放当前封装的句柄</CODE></LI>
</OL>
<P>这种设计与ATL窗口类的封装风格是一致的,ATL的CWindow就是对HWND句柄的一个简单的封装类,而CWindowImpl则负责管理窗口的整个生命周期。</P>
<P>GDI的封装类都定义在<I><font color="#0000FF">atlgdi.h</font></I>中(译者注:注意是“定义在”而不是通常说的“声明在”头文件中,这是因为ATL/WTL使用的是包含编译模式,所有的代码都在头文件中),
只有<CODE>CMenuT</CODE>例外 ,它定义在<font color="#0000CC"><I>atluser.h</I></font>中。你不需要直接包含这些头文件,因为它们已经包含在<I>atlapp.h</I>
中了。每种模板类都由很容易记忆的名字:</P>
<P>
<TABLE width="100%" border=1>
<TBODY>
<TR>
<TH width="25%"> <P>封装 GDI 对象</P></TH>
<TH width="25%"> <P>模板类</P></TH>
<TH width="25%"> <P>可管理对象封装</P></TH>
<TH width="25%"> <P>简单的句柄封装</P></TH>
</TR>
<TR>
<TD width="25%"> <P>Pen </P></TD>
<TD width="25%"> <P><CODE>CPenT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CPen</CODE> </P></TD>
<TD width="25%"> <P><CODE>CPenHandle</CODE> </P></TD>
</TR>
<TR>
<TD width="25%"> <P>Brush </P></TD>
<TD width="25%"> <P><CODE>CBrushT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CBrush</CODE> </P></TD>
<TD width="25%"> <P><CODE>CBrushHandle</CODE> </P></TD>
</TR>
<TR>
<TD width="25%"> <P>Font </P></TD>
<TD width="25%"> <P><CODE>CFontT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CFont</CODE> </P></TD>
<TD width="25%"> <P><CODE>CFontHandle</CODE> </P></TD>
</TR>
<TR>
<TD width="25%"> <P>Bitmap </P></TD>
<TD width="25%"> <P><CODE>CBitmapT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CBitmap</CODE> </P></TD>
<TD width="25%"> <P><CODE>CBitmapHandle</CODE> </P></TD>
</TR>
<TR>
<TD width="25%"> <P>Palette </P></TD>
<TD width="25%"> <P><CODE>CPaletteT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CPalette</CODE> </P></TD>
<TD width="25%"> <P><CODE>CPaletteHandle</CODE> </P></TD>
</TR>
<TR>
<TD width="25%"> <P>Region </P></TD>
<TD width="25%"> <P><CODE>CRgnT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CRgn</CODE> </P></TD>
<TD width="25%"> <P><CODE>CRgnHandle</CODE> </P></TD>
</TR>
<TR>
<TD width="25%"> <P>Device context </P></TD>
<TD width="25%"> <P><CODE>CDCT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CDC</CODE> </P></TD>
<TD width="25%"> <P><CODE>CDCHandle</CODE> </P></TD>
</TR>
<TR>
<TD width="25%"> <P>Menu </P></TD>
<TD width="25%"> <P><CODE>CMenuT</CODE> </P></TD>
<TD width="25%"> <P><CODE>CMenu</CODE> </P></TD>
<TD width="25%"> <P><CODE>CMenuHandle</CODE> </P></TD>
</TR>
</TBODY>
</TABLE>
<p></P>
<P>相对于MFC围绕着对象指针封装的方法,我更喜欢WTL的方法:你不用总是担心得到一个NULL指针(封装的句柄也可能是NULL,但这是另一回事), 也不用总是注意操作临时对象这种特殊情况(译者注:MFC有一个回收机制,总是试图释放使用FromHandle得到的临时对象),还有一点就是使用这种形式封装的类实例只占用很少的资源,因为类只有一个成员变量,就是其封装的句柄。象这种类似CWindow的封装形式,你可以在不同的线程之间传递封装类对象而不用担心线程安全问题,正是因为这样,WTL也不需要象MFC那样的线程特殊性映射。</P>
<P>下面的设备上下文封装类用于一些特殊的绘制场景:</P>
<UL>
<LI><CODE>CClientDC</CODE>: 封装了GetDC()和ReleaseDC(),用于Windows客户区的绘制<code>。</code>
<LI><CODE>CWindowDC</CODE>: <CODE>封装了GetWindowDC()</CODE> <CODE>和ReleaseDC(),用于在整个Windows上下文中绘制。</CODE>
<LI><CODE>CPaintDC</CODE>: <CODE>封装了BeginPaint()</CODE> <CODE>和 EndPaint()</CODE>,用户<CODE>WM_PAINT</CODE>
消息响应函数。 </LI>
</UL>
<P>每个类的构造函数都有一个HWND(窗口句柄)参数,类的行为和MFC的同名类相似。三个类都是CDC的派生类,它们自己管理设备上下文。</P>
<H2><A name=wrapperscommon></A><font color="#FFFF66">封装类的通用函数</font></H2>
<P>所有的GDI封装类使用的是相同的设计理念,所以它们的使用方法都大同小异,为了简单起见,这里只介绍一下CBitmapT类。</P>
<DL>
<DT>封装 GDI 对象句柄
<DD>每个类都由一个公有成员变量,也就是C++对象封装的GDI对象句柄,CBitmapT有一个HBITMAP类型成员,名为<CODE>m_hBitmap。</CODE>
<DT>构造函数
<DD>构造函数有一个HBITMAP类型的参数,默认值是NULL,<CODE>m_hBitmap</CODE>将被初始化位这个值。
<DT>析构函数
<DD>如果<CODE>t_bManaged</CODE> 是true,并且<CODE>m_hBitmap</CODE>不是NULL<CODE>,那么析构函数会调用DeleteObject()释放这个bitmap。</CODE>
<DT><CODE>Attach()</CODE> <CODE>和 <SPAN
class=cpp-keyword>operator</SPAN> =</CODE>
<DD>这两个函数都有一个HBITMAP类型的参数,<CODE>如果t_bManaged是true,并且</CODE><CODE>m_hBitmap</CODE>不为NULL,它
没有合适的资源?快使用搜索试试~ 我知道了~
编写WTL资料《WTL for MFC Programmers》
共81个文件
png:62个
htm:10个
zip:9个
5星 · 超过95%的资源 需积分: 10 70 下载量 105 浏览量
2012-01-01
12:52:01
上传
评论
收藏 1.38MB 7Z 举报
温馨提示
这个就是大名鼎鼎的(也是唯一的)WTL编程书籍《WTL for MFC Programmers》。
资源推荐
资源详情
资源评论
收起资源包目录
编写WTL资料.7z (81个子文件)
编写WTL资料
WTL for MFC Programmers, Part IV - Dialogs and Controls - WTL.htm 38KB
WTL for MFC Programmers, Part II - WTL GUI Base Classes - WTL.htm 33KB
WTL for MFC Programmers, Part V - Advanced Dialog UI Classes - WTL.htm 31KB
WTL for MFC Programmers, Part I - ATL GUI Classes - WTL.htm 32KB
WTL for MFC Programmers, Part IX - GDI Classes, Common Dialogs, and Utility Classes - WTL.htm 51KB
WTL for MFC Programmers, Part VIII - Property Sheets and Wizard.htm 31KB
WTL for MFC Programmers, Part VI - Hosting ActiveX Controls - WTL.htm 27KB
WTL for MFC Programmers, Part III - Toolbars and Status Bars - WTL.htm 24KB
images
tbbtntext3.png 9KB
startdisabled.png 3KB
appwiz3.png 21KB
panecont7.png 4KB
newtb3.png 5KB
firstabout.png 5KB
cm2_od25.png 11KB
cm2_seasonedit5.png 14KB
okbtncur4.png 4KB
appwiz32.png 21KB
ddxerror4.png 7KB
tabicon8.png 1KB
cm2_lv5.png 13KB
tbtooltip3.png 4KB
kibbles2.png 56KB
iectrl6.png 6KB
emptysplit7.png 3KB
bkgndsheet8.png 4KB
explorerpc7.png 2KB
bareapp4.png 4KB
classview.png 6KB
custompc7.png 6KB
panes7.png 4KB
firstwin.png 3KB
defaultapp3.png 4KB
msgchkbox4.png 5KB
emptyhsplit7.png 4KB
sheetpos8.png 7KB
appwiz41.png 22KB
firstwin2.png 4KB
appwiz7.png 21KB
sampleapp6.png 14KB
sb_app_t8.png 9KB
clockapp.png 3KB
intropage8.png 3KB
simplesheet8.png 5KB
aboutbox6.png 6KB
hyperlink5.png 12KB
cm2_od15.png 6KB
wizintro8.png 5KB
cm2_bb15.png 11KB
appwiz1.png 13KB
choosecolors.png 13KB
app_aly_t8.png 10KB
tbeditor3.png 7KB
kibbles0.png 19KB
custombars7.png 13KB
tbflyby3.png 5KB
colorpage8.png 3KB
exitbtncur4.png 4KB
appwiz6.png 22KB
rebar3.png 4KB
kibbles1.png 22KB
aboutph6.png 5KB
insertmenu6.png 8KB
clockmenu.png 1KB
ddxok4.png 4KB
appwiz2.png 22KB
multipanesb3.png 4KB
appwiz33.png 21KB
appwiz31.png 22KB
cm1ctrls4.png 5KB
WTL for MFC Programmers, Chinese Version Prologue.htm 5KB
WTL for MFC Programmers, Part VII - Splitter Windows - WTL.htm 35KB
demo
WTL4MFC7_demo.zip 88KB
WTL4MFC2_demo.zip 59KB
WTL4MFC5_demo.zip 80KB
WTL4MFC8_demo.zip 267KB
WTL4MFC9_demo.zip 157KB
WTL4MFC6_demo.zip 63KB
WTL4MFC1_demo.zip 23KB
WTL4MFC4_demo.zip 48KB
WTL4MFC3_demo.zip 60KB
共 81 条
- 1
资源评论
- 我是小章2014-07-29谢谢分享, WTL正在学习中
- ARX开发者2013-03-29写的不错,学习WTL必备吧。正在学习中,只能说这么多先。
- csdon1112015-08-05开头几章还可以~~
- 早起的虫子被鸟吃_好名抢光了2014-06-05白下载了 对我来说没什么用
彩阳
- 粉丝: 2168
- 资源: 102
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功