VC、MFC中設置控件的背景色、標題、字體顏色、字體要注意的地方[轉]


在MFC中設置控件的背景色、字體、字體顏色、標題等屬性主要是利用OnCtlColor函數來實現。

如:
HBRUSH CAlarm:: OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
//設置靜態控件的背景色和文本顏色
if (pWnd->GetDlgCtrlID() == IDC_STATIC_SHOW_MSG)
{
pWnd->SetWindowText("123");
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,0));
//m_hStaticBkColor是CBrush類類型的變量,要在構造函數中初始化為指定的顏色
hbr = m_hStaticBkColor;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
注意在OnCtlColor函數中:
控件的標題、字體通過CWnd類的SetWindowText和SetFont函數來設置。
控件的背景色通過添加一個CBrush類類型的畫刷來設置,控件的字體背景色、字體顏色通過CDC類的SetBkMode、SetBkColor和SetTextColor函數來設置。此外,不要在OnCtlColor函數中調用CDC類的TextOut函數,如果調用了 SetBkMode( TRANSPARENT)再去調用 SetBkColor就沒有作用了(沒有先后順序, SetBkMode( TRANSPARENT)可以在隨意的位置 )。
 
 
此外,我們有時會在OnPaint或OnInitDialog或OnInitialUpdate函數中設置控件的外觀屬性。
但是在OnPaint函數中設置控件的字體顏色(即SetBkMode和SetTextColor)只能在TextOut函數中有效,在SetWindowText函數中是無效的。TextOut函數一般在OnPaint函數中調用的,並且可以通過SetBkMode和SetTextColor設置字體的顏色和字體的背景色。當然SetWindowText也可以在OnPaint函數中調用,只不過就不能在OnPaint函數中通過SetBkMode和SetTextColor設置字體的顏色和字體的背景色。
 
 
因此,改變控件的外觀屬性主要是在OnCtlColor函數中實現,當然還要據實際情況,有可能在OnPaint或OnInitDialog或OnInitialUpdate函數中設置控件的外觀屬性。此外,如果要改變控件背景色,除了在OnCtlColor中利用CBrush類類型的畫刷來設置外,還可以利用CDC類型的FillSolidRect函數在合適的函數中來設置。至於字體的設置,據實際情況在合適的函數中設置,如果要用到TextOut的,就在OnPaint函數中調用吧。
 
轉自:http://blog.sina.com.cn/s/blog_6230f1a30100wc21.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM