如何修改幾種控件的顏色和字體

 http://www.360doc.com/content/10/0509/16/1393127_26805854.shtml  html

           _ 360 如何改變控件的字體和字體顏色函數

如何修改幾種控件的顏色和字體字體

設置控件顏色的主要目的是爲了解決控件文字背景色不透明的問題。當向一個有背景色的界面上放置控件後,因爲控件文字的背景色與界面背景色不符,使文字背後留下難看的灰塊。如今我定義了可設置背景色和前景色的控件,只要使控件背景色與界面背景色相同,問題就解決了。指針

設置控件顏色和字體時必須重載該控件對應的類,在其中加入相關的顏色控制和字體函數。各類控件的作法徹底相同,只是重載的類不同。htm

注:對於靜態文本控件(Static Text)、單選按鈕(Radio Button)、複選按鈕(Check Box)、組合框(Group Box)和編輯控件(Edit Box)均可以用相同的方法設置文字顏色和背景色,但這種方法對按鈕(Button)無效,修改按鈕的顏色和字體請參考文章:《可設置字體和顏色的按鈕》。對象

以靜態文本控件(Static Text)爲例:接口

①用ClassWizard添加新類,基類選爲CStatic,新類名稱設爲CMyStatic。
②在CStatic類中,用ClassWizard重載消息「=WM_CTLCOLOR」的函數CtlColor(),注意:不要錯誤地重載名爲「WM_CTLCOLOR」的消息,若重載了它會得不到想要的效果。
③在CtlColor()函數中修改控件的背景色和文本顏色。
④加入設置顏色和字體的接口函數。get

如下爲CStatic類的相關部分:it

在 MyStatic.h 中加入變量和接口函數的定義:io

private:
    COLORREF    m_ForeColor;        //文本顏色
    COLORREF    m_BackColor;        //背景色
    CBrush      m_BkBrush;          //背景刷
    CFont*      p_Font;             //字體
// 接口函數
public:
    void SetForeColor(COLORREF color);      //設置文本顏色
    void SetBkColor(COLORREF color);        //設置背景顏色
    void SetTextFont(int FontHight,LPCTSTR FontName);   //設置字體

在 MyStatic.cpp 中加入如下內容:

在構造函數中,設置變量的初值

CStaticEx::CStaticEx()
{
    m_ForeColor = RGB(0,0,0);            //文字顏色(黑色)
    m_BackColor = RGB(255,255,255);      //背景色(白色)
    m_BkBrush.CreateSolidBrush(m_BackColor);    //背景刷
    p_Font = NULL;                       //字體指針
}

用ClassWizard重載消息「=WM_CTLCOLOR」(注:不是WM_CTLCOLOR),在其中修改控件的前景色和背景色:

HBRUSH CStaticEx::CtlColor(CDC* pDC, UINT nCtlColor)
{
    pDC->SetTextColor( m_ForeColor );         //設置文字顏色
    pDC->SetBkColor( m_BackColor );           //設置背景色
    return (HBRUSH)m_BkBrush.GetSafeHandle(); //返回背景刷
}

另外,爲方便調用,再定義三個接口函數:

//設置控件文字顏色

void CStaticEx::SetForeColor(COLORREF color)
{
    m_ForeColor = color;         //設置文字顏色
}

//設置控件背景顏色

void CStaticEx::SetBkColor(COLORREF color)
{
    m_BackColor = color;
    m_BkBrush.Detach();           //分離原背景刷
    m_BkBrush.CreateSolidBrush( m_BackColor ); //創建背景刷
}

//設置控件字體

void CStaticEx::SetTextFont(int FontHight,LPCTSTR FontName)
{
    if ( p_Font )   delete p_Font;    //刪除舊字體
    p_Font = new CFont;               //生成字體對象
    p_Font->CreatePointFont( FontHight, FontName ); //建立字體
    SetFont( p_Font );                //設置控件字體
}

其中FontHight爲字體高度,FontName爲字體名。

因爲新字體由new生成,必須顯式回收,這項工做能夠在CMyButton類的析構函數中進行:

CStaticEx::~CStaticEx()
{
    if ( p_Font )    delete p_Font;        //刪除字體
}

這樣一個可設置顏色和字體的靜態文本類就定義好了。使用時先在對話框中加入靜態文本控件,修改它的ID(注意:必須修改它的ID值,不然沒法爲它定義變量),而後用ClassWizard爲它定義控制變量,把它的類型設置爲CStaticEx;在對話框的OnInitDialog()函數中利用控件變量設置控件的顏色和字體就能夠了。

以上就是修改靜態文本控件的顏色和字體的方法,其它控件的作法徹底相同,只是對應的基類不一樣。

單選按鈕、複選按鈕和組合框能夠用 CButton類 做爲基類生成新的擴展類 CButtonEx;編輯控件用 CEdit類做爲基類生成擴展類 CEditEx。而CButtonEx類和CEditEx類的內容與上述的CStaticEx類徹底相同,詳見示例程序。

在實際應用中,還有幾個問題須要注意一下,一是單選按鈕一般是成組使用的,用ClassWizard只能爲一組單選按鈕的第一個添加控制變量,其它的只能用手工加入。再就是添加組合框時也必須修改ID,不然沒法定義變量。

示例程序界面:

本文所用MFC函數速查:
CBrush::CreateSolidBrush
CDC::Detach
CDC::SetBkColor
CDC::SetTextColor
CFont::CreatePointFont
CGdiObject::GetSafeHandle
CWnd::SetFont

相關文章
相關標籤/搜索