1. 程式人生 > >VS2010 MFC關於修改靜態文字框的顏色大小背景

VS2010 MFC關於修改靜態文字框的顏色大小背景

假設有一個靜態文字框控制元件,其ID為:IDC_STATIC_XSDJ,且關聯一個control類的CStatic型別的變數m_static_xsdj。

設定字型時自然要用到CFont類,下面介紹兩種方法,兩種方法都要先在標頭檔案中新增一個變數CFont newFont,切記要宣告稱類的成員變數,不能是區域性變數

方法一:

在OnInitDialog()函式中新增程式碼:

1 newFont.CreatePointFont(160,L"楷體");
2 m_static_xsdj.SetFont(&newFont);

至於程式碼中的引數問題,自己百度或者參考MSDN吧。

這種方法要自己指定字型,但更多的情況是我們希望在原有字型上進行修改,這就是方法二:

思路是:首先獲取原有字型,然後獲取其對應的LOGFONT結構體,接著修改該LOGFONT結構體,最後利用修改後的結構體,建立一個新的字型。

方法二:

 

給出程式碼,依然是寫到OnInitDialog 中

複製程式碼
CFont* font;
font=m_static_xsdj.GetFont();//獲取CFont物件
LOGFONT lf;
font->GetLogFont(&lf);//獲取LOGFONT結構體
lf.lfHeight=-26
; //修改字型大小 lf.lfItalic=TRUE; //傾斜 lf.lfWeight=400; //修改字型的粗細 newFont.CreateFontIndirectW(&lf);//建立一個新的字型 m_static_xsdj.SetFont(&newFont);
複製程式碼

下面是修改靜態文字框控制元件中文字顏色、文字背景顏色、和控制元件背景顏色。

首先應當明確的是,在那個函式中下手(寫程式碼),答案是OnCtlColor()函式中,這個函式是用於響應WM_CTLCOLOR訊息的,當控制元件需要重繪時會發出這個訊息(姑且這麼簡單理解吧).

說以下這個函式的函式原型:

1 HBRUSH CDlgXSDJ::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
2 {
3     HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
4     return hbr;
5 }

三個引數:pDC表示與當前控制元件相關聯的裝置上下文,pWnd是當前控制元件的指標,nCtlColor 表示控制元件的型別,返回值是一個HBRUSH控制代碼,該控制代碼使用者重繪控制元件的背景色。

然後說一下SetTextColor()、SetBkColor()、和SetBkMode()三個函式

SetTextColor()函式很明顯是設定文字顏色的,而SetBkColor()函式不是用來設定控制元件背景顏色的,而是用來設定文字背景顏色的(就是包含文字的矩形)、SetBkMode()是用來設定文字背景模式的,引數只有兩個選擇OPAQUE、TRANSPARENT表示是否透明。

那麼控制元件的背景顏色怎麼設定呢?答案是通過返回的HBRUSH控制代碼。

下面給出一個程式碼,和執行效果

複製程式碼
 1 HBRUSH CDlgXSDJ::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 2 {
 3     HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
 4     if( IDC_STATIC_XSDJ  ==  pWnd->GetDlgCtrlID())//判斷髮出訊息的空間是否是該靜態文字框
 5     {
 6         pDC->SetTextColor(RGB(255,0,0));//設定文字顏色為紅色
 7         pDC->SetBkMode(OPAQUE);//設定文字背景模式為透明
 8         pDC->SetBkColor(RGB(0,0,255));//設定文字背景為藍色
 9         hbr=CreateSolidBrush(RGB(0,255,0));//控制元件的背景色為綠色
10     }
11     return hbr;//返回用於重繪控制元件背景的畫刷
12 }
複製程式碼