如何修改幾種控制項的顏色和字型

2021-06-02 09:56:17 字數 2328 閱讀 5250

設定控制項顏色的主要目的是為了解決控制項文字背景色不透明的問題。當向乙個有背景色的介面上放置控制項後,由於控制項文字的背景色與介面背景色不符,使文字背後留下難看的灰塊。現在我定義了可設定背景色和前景色的控制項,只要使控制項背景色與介面背景色相同,問題就解決了。

設定控制項顏色和字型時必須過載該控制項對應的類,在其中加入相關的顏色控制和字型函式。各種控制項的做法完全相同,只是過載的類不一樣。

注:對於靜態文字控制項(static text)、單選按鈕(radio button)、複選按鈕(check box)、組合框(group box)和編輯控制項(edit box)都可以用相同的方法設定文字顏色和背景色,但這種方法對按鈕(button)無效,修改按鈕的顏色和字型請參考文章:《可設定字型和顏色的按鈕》。

以靜態文字控制項(static text)為例:

①用classwizard新增新類,基類選為cstatic,新類名稱設為cmystatic。

②在cstatic類中,用classwizard過載訊息「=wm_ctlcolor」的函式ctlcolor(),注意:不要錯誤地過載名為「wm_ctlcolor」的訊息,若過載了它會得不到想要的效果。

③在ctlcolor()函式中修改控制項的背景色和文字顏色。

④加入設定顏色和字型的介面函式。

在 mystatic.h 中加入變數和介面函式的定義:

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()

用classwizard過載訊息「=wm_ctlcolor」(注:不是wm_ctlcolor),在其中修改控制項的前景色和背景色:

hbrush cstaticex::ctlcolor(cdc* pdc, uint nctlcolor)

另外,為方便呼叫,再定義三個介面函式:

//設定控制項文字顏色

void cstaticex::setforecolor(colorref color)

//設定控制項背景顏色

void cstaticex::setbkcolor(colorref color)

//設定控制項字型

void cstaticex::settextfont(int fonthight,lpctstr fontname)

其中fonthight為字型高度,fontname為字型名。

由於新字型由new生成,必須顯式**,這項工作可以在cmybutton類的析構函式中進行:

cstaticex::~cstaticex()

這樣乙個可設定顏色和字型的靜態文字類就定義好了。使用時先在對話方塊中加入靜態文字控制項,修改它的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

改變控制項的背景顏色和字型顏色

在預設情況下,我們看到的對話方塊及其控制項的背景和字型顏色都是淺灰色的,為了美化介面我們可以使用mfc中的wm ctlcolor訊息,它的響應函式是cwnd類的onctlcolor.該函式宣告如下 afx msg hbrush onctlcolor cdc pdc,cwnd pwnd,uint nc...

設定控制項的顏色,字型

package com.oyzz.ch3 6 import android.os.bundle import android.view.view 必須引用 widget.button才能宣告使用button物件 import android.widget.button 必須引用 widget.tex...

如何動態更改VC控制項字型顏色

公尺度軟體 www.midosoft.cn 在vc中更改控制項的顏色沒有bcb那麼方便,我覺的這一點有待改進.在網上查不到東態更改控制項的顏色的文章,最後自己試成功了.首先 定義乙個全域性變數,colorref statuscolor 然後過載dialog的on wm ctlcolor,在裡面指定你...