当前位置: 首页 > 图文教程 > 开发语言 > VC++ > WTL字体类

VC++
在Dialog中使用Menu和Toolbar
如何定制对话框中的回车键
再谈 Windows 2000 “打开”文件对话框
Windows2000新型Open对话框的使用
Windows SDK 非模态对话框的消息处理
VC6中使用CHtmlView在对话框控制中显示HTML文件
Windows 2000 UI 新特点之四:其他类型的外壳扩展
Windows 2000 UI 新特点之二:自定义文件夹栏目
Windows 2000 UI 新特点之三:搜索管理器
Windows 2000 UI 新特点之一:信息条提示(Infotip)
数据库异步操作(ADODB)
VC++:小编谈自动注册数据源(DSN)
VC++:小编分享面向对象特征及其优点
VC++:VC++中Windows 3.x的协同多任务
VC++:小编浅谈VC++中的CRecordset类
VC++:小编浅谈ODBC概念,了解ODBC不在是难事
VC++:小编谈用ODBC创建表
VC++:小编浅谈用DAO创建表
VC++:浅析VC++中传统控件的控件通知消息
VC++:小编浅谈静态控件

VC++ 中的 WTL字体类


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 65 ::
收藏到网摘: n/a

WTL字体类


翻译/南京中萃食品有限公司(210061) 肖进
原作/Robert Edward Caldecott

来源:www.codeproject.com

下载源代码
 

前言
  使用这个类可以很容易在窗口或对话框中加入各种额外的字体。我们可以通过CWindowFont类建立一个基于当前窗口的新字体。你所要做的就是设置字体属性(加重、斜体等),来美化你的程序。例如,在程序中一个使用加重字体的静态控件。
在WTL对话框中使用该类,只需简单地进行如下操作。首先加入头文件:

#include "windowfont.h" 
然后,为每一个待创建的字体加入一个CWindowsFont成员变量。
...CWindowFont m_fontBold; 
然后,在对话框中的OnInitDialog函数中, 直接在对话框中的控件上应用新字体风格。
// 建立字体,应用在静态控件 IDC_TEXT 上m_fontBold.Apply(m_hWnd, CWindowFont::typeBold, IDC_TEXT); 
调用Create函数创建字体,调用控件的SetFont函数。
//建立加重字体if (m_fontBold.Create(m_hWnd, CWindowFont::typeBold)) GetDlgItem(IDC_TEXT).SetFont(m_fontBold); 
非常简单!通常,我在每个程序的关于框内使用这个类去显示程序的版本信息。如图一所示。另外我还常在向导首页上使用该类来建立两倍高度的字体,以美化窗口外观。


图一

说明

类中字体可以设置为以下风格 ,也可以对它们进行或操作:
 加重Bold (CWindowFont::typeBold) 斜体Italic (CWindowFont::typeItalic) 下划线 (CWindowFont::typeUnderline) 两倍高度 (CWindowFont::typeDoubleHeight)
CWindowFont部分源码

CWindowFont类的部分源码如下所示:
#pragma once#include // LOGFONT 结构的包裹类class CLogFont : public LOGFONT{public: CLogFont() { memset(this, 0, sizeof(LOGFONT)); }};// 建立基于指定窗口的字体class CWindowFont : public CFont {public: //字体风格 typedef enum tagEType { typeNormal = 0x00, typeBold = 0x01, typeItalic = 0x02, typeUnderline = 0x04, typeDoubleHeight = 0x08, } EType;public: CWindowFont() : CFont() { } /// hWnd -窗口句柄 /// nType - 字体风格 CWindowFont(HWND hWnd, int nType) { // HWND不能为NULL ATLASSERT(hWnd != NULL); //创建字体 Create(hWnd, nType); } virtual ~CWindowFont() { }public: //创建字体 // hWnd -窗口句柄 // nType -字体风格 //成功则返回TRUE bool Create(HWND hWnd, int nType) { // 窗口句柄不能为NULL ATLASSERT(hWnd != NULL); ATLASSERT(::IsWindow(hWnd) != FALSE); // 获得当前窗口的字体 HFONT hFont = (HFONT)::SendMessage(hWnd, WM_GETFONT, 0, 0); // 是否获得当前字体成功? if (hFont == NULL) return false; CLogFont lf; // 填充 LOGFONT结构 if (::GetObject(hFont, sizeof(lf), &lf) == 0) return false; // 分离LOGFONT成员变量 if (nType & typeBold) lf.lfWeight = FW_BOLD; if (nType & typeItalic) lf.lfItalic = TRUE; if (nType & typeUnderline) lf.lfUnderline = TRUE; if (nType & typeDoubleHeight) lf.lfHeight *= 2; // 建立新字体 return CreateFontIndirect(&lf) ? true : false; } //建立新字体并应用到控件上去 bool Apply(HWND hWnd, int nType, UINT nControlID) { // 先建立字体 if (!Create(hWnd, nType)) return false; // 应用到控件上 CWindow wndControl = ::GetDlgItem(hWnd, nControlID); ATLASSERT(wndControl != NULL); wndControl.SetFont(m_hFont); return true; }};