My FAQ,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > WINDOWS标准界面元素
WTL字体类
作者:未知 时间:2005-07-20 14:11 出处:VC知识库 责编:MyFAQ
              摘要:WTL字体类

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;
    }
};    
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有