WTL字体类

李丽丽780

李丽丽780

2016-01-29 12:06

WTL字体类,WTL字体类

WTL字体类


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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

来源: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;    }};      
展开更多 50%)
分享

猜你喜欢

WTL字体类

C语言教程 C语言函数
WTL字体类

国外创意的图形和字体类LOGO设计欣赏

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
国外创意的图形和字体类LOGO设计欣赏

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于WTL 双缓冲(double buffer)绘图的分析详解

编程语言 网络编程
基于WTL 双缓冲(double buffer)绘图的分析详解

在WTL中使用MD5加密法

C语言教程 C语言函数
在WTL中使用MD5加密法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

2010D&AD学生组字体设计类获奖作品

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
2010D&AD学生组字体设计类获奖作品

2010D&AD专业组字体设计类获奖作品

平面设计 海报设计 海报设计素材 广告设计 平面设计素材
2010D&AD专业组字体设计类获奖作品

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

三态选择树实现终结者

三态选择树实现终结者

全面剖析VB.NET(7)

全面剖析VB.NET(7)
下拉加载更多内容 ↓