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 }
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章