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 }