WTL字体类

李丽丽780

李丽丽780

2016-01-29 12:06

WTL字体类,WTL字体类

WTL字体类


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

(本文来源于图老师网站,更多请访问https://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)绘图的分析详解

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

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

lol偷钱流符文搭配推荐

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

在WTL中使用MD5加密法

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

详解Icon-font图标字体的四类制作方法

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
详解Icon-font图标字体的四类制作方法

lolAD刺客新符文搭配推荐

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

三态选择树实现终结者

三态选择树实现终结者

全面剖析VB.NET(7)

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