WTL字体类

翻译|其它|编辑:郝浩|2006-02-15 09:47:00.000|阅读 1245 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>



下载源代码


前言
    使用这个类可以很容易在窗口或对话框中加入各种额外的字体。我们可以通过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;
        }
   };


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP