問題:在VC中,當我們大量的運用控件時,往往會為改變控件的顏色所煩惱。因為VC不象VB那樣,可以方便地改變對話框及各個控件的顏色,要改變一個控件的顏色比較煩瑣。那麼,VC中怎樣改變控件的顏色。
思路:在控件顯示之前,每一個控件會向父對話框發送一個WM_CTLCOLOR消息,這個消息缺省處理函數CWnd::OnCtlColor返回一個HBRUSH類型的句柄,這樣,就可以設置前景和背景文本顏色,並為控件或者對話框的非文本區域選定一個刷子。
實現:
① 先創建一個基於對話框的工程,命名為test,然後在對話框上加入一個ListBox控件。
② 在testDlg.h中加入一個成員變量:HBRUSH m_hbrush;
③ 在OnInitDialog()中,加入m_hbrush=CreateSolidBrush(RGB(0,0,0);此處設置的RGB值可以改變ListBox的背景色。為了觀看ListBox中字的顏色變化,我們給ListBox加入幾個字:利用Class Wizard給ListBox加入一個Control類型的成員變量m_ctrlListBox,然後在OnInitDialog()加入如下所示的代碼:
m_ctrlListBox.AddString("第一行");
m_ctrlListBox.AddString("第二行");
④ 點擊Class Wizard,給testDlg加入WM_CTLCOLOR事件,單擊Edit Code按鈕,然後把改函數的內容替換為如下代碼:
if(nCtlColor== CTLCOLOR_LISTBOX)
{
pDC->SetBkMode(TRANSPARENT);
//此處設置字體的顏色
pDC->SetTextColor(RGB(255,255,255));
return m_hbrush;
}
else
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
現在編譯並運行改程序,可以看到列表框已經變成黑色而其中的字已經變為白色了!