<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_for_mfc_programmers_cn.zip_wt
共82个文件
png:62个
htm:10个
zip:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 57 浏览量
2022-09-22
17:58:32
上传
评论
收藏 1.49MB ZIP 举报
温馨提示
WT教程中文版 内有详细的介绍 包括各个方面
资源详情
资源评论
资源推荐
收起资源包目录
wtl_for_mfc_programmers_cn.zip (82个子文件)
wtl_for_mfc_programmers_cn
WTL for MFC Programmers, Part V - Advanced Dialog UI Classes - WTL.htm 31KB
WTL for MFC Programmers, Part IV - Dialogs and Controls - WTL.htm 38KB
images
cm2_seasonedit5.png 14KB
sheetpos8.png 7KB
kibbles0.png 19KB
appwiz31.png 22KB
cm2_lv5.png 13KB
appwiz1.png 13KB
intropage8.png 3KB
app_aly_t8.png 10KB
exitbtncur4.png 4KB
appwiz32.png 21KB
appwiz3.png 21KB
classview.png 6KB
tbtooltip3.png 4KB
panes7.png 4KB
colorpage8.png 3KB
emptysplit7.png 3KB
custompc7.png 6KB
newtb3.png 5KB
insertmenu6.png 8KB
ddxok4.png 4KB
iectrl6.png 6KB
tbbtntext3.png 9KB
cm2_od15.png 6KB
clockapp.png 3KB
msgchkbox4.png 5KB
panecont7.png 4KB
appwiz33.png 21KB
clockmenu.png 1KB
hyperlink5.png 12KB
cm2_od25.png 11KB
appwiz6.png 22KB
appwiz7.png 21KB
rebar3.png 4KB
custombars7.png 13KB
simplesheet8.png 5KB
aboutbox6.png 6KB
bkgndsheet8.png 4KB
kibbles1.png 22KB
appwiz41.png 22KB
multipanesb3.png 4KB
okbtncur4.png 4KB
kibbles2.png 56KB
firstwin.png 3KB
cm1ctrls4.png 5KB
choosecolors.png 13KB
tbflyby3.png 5KB
ddxerror4.png 7KB
defaultapp3.png 4KB
wizintro8.png 5KB
aboutph6.png 5KB
appwiz2.png 22KB
startdisabled.png 3KB
explorerpc7.png 2KB
sb_app_t8.png 9KB
sampleapp6.png 14KB
cm2_bb15.png 11KB
firstabout.png 5KB
bareapp4.png 4KB
firstwin2.png 4KB
tbeditor3.png 7KB
tabicon8.png 1KB
emptyhsplit7.png 4KB
WTL for MFC Programmers, Part VIII - Property Sheets and Wizard.htm 31KB
WTL for MFC Programmers, Part II - WTL GUI Base Classes - WTL.htm 33KB
WTL for MFC Programmers, Part VII - Splitter Windows - WTL.htm 35KB
WTL for MFC Programmers, Chinese Version Prologue.htm 5KB
WTL for MFC Programmers, Part VI - Hosting ActiveX Controls - WTL.htm 27KB
WTL for MFC Programmers, Part I - ATL GUI Classes - WTL.htm 32KB
WTL for MFC Programmers, Part III - Toolbars and Status Bars - WTL.htm 24KB
demo
WTL4MFC2_demo.zip 59KB
WTL4MFC1_demo.zip 23KB
WTL4MFC9_demo.zip 157KB
WTL4MFC4_demo.zip 48KB
WTL4MFC7_demo.zip 88KB
WTL4MFC5_demo.zip 80KB
WTL4MFC3_demo.zip 60KB
WTL4MFC8_demo.zip 267KB
WTL4MFC6_demo.zip 63KB
WTL for MFC Programmers, Part IX - GDI Classes, Common Dialogs, and Utility Classes - WTL.htm 51KB
www.pudn.com.txt 218B
共 82 条
- 1
钱亚锋
- 粉丝: 85
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AIS2024 valid
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0