假設有一個靜態文本框控件,其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 }