首先,需要一個(gè)畫(huà)筆函數(shù),此函數(shù)用于響應(yīng)消息為WM_CTLCOLOR的消息,當(dāng)子控件要被繪制的時(shí)候,主窗口調(diào)用這個(gè)函數(shù)。
于是,我要改變顏色的話,那么點(diǎn)擊另外一個(gè)按鈕,啟動(dòng)繪圖的函數(shù)時(shí),就會(huì)調(diào)用這個(gè)函數(shù),來(lái)用這個(gè)函數(shù)設(shè)置的方法繪制,比如這里設(shè)置顏色
如果控制為CTLCOLOR_EDIT,也就是說(shuō)是改變的EDIT控件的顏色,那么就相應(yīng)的用pDC->SetTextColor()來(lái)實(shí)現(xiàn)。
總體來(lái)說(shuō),每當(dāng)子控件要被繪制時(shí),需要調(diào)用這個(gè)函數(shù),因此進(jìn)行重寫(xiě),實(shí)現(xiàn)個(gè)性化的要求。
HBRUSH CTest10Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)


{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor == CTLCOLOR_EDIT)
pDC->SetTextColor(color);
// TODO: Return a different brush if the default is not desired
return hbr;
}
然后在每一個(gè)RadioButton中添加響應(yīng)的方法,設(shè)置這個(gè)color,于是每次就會(huì)響應(yīng)并設(shè)置這個(gè)Color,至此,在繪制的時(shí)候就會(huì)顯示新的顏色。
另外一點(diǎn)是在RadioButton的上面,見(jiàn)代碼:
static COLORREF color=RGB(0,0,0);
void CTest10Dlg::OnRadio1()


{
// TODO: Add your control notification handler code here
color = RGB(255,0,0);
GetDlgItem(IDC_EDIT1)->SetFocus();
}
看到上處,用到的是一個(gè)static變量Color來(lái)實(shí)現(xiàn)這個(gè),當(dāng)然也可以作為類成員初始化,然后設(shè)置完了后,每一個(gè)RadioButton響應(yīng)函數(shù)中都可以改變這個(gè)color的值,改變后,主窗口就會(huì)自動(dòng)調(diào)用前面的那個(gè)函數(shù),根據(jù)顏色來(lái)繪制。關(guān)鍵的問(wèn)題是:后面的那個(gè)SetFocus()函數(shù)有什么用呢?
試著注釋掉吧,我先前注釋后,點(diǎn)擊RadioButton沒(méi)有反映,然后只有當(dāng)鼠標(biāo)放到EditBox的時(shí)候,激活這個(gè)控件才有作用,為何?
從這里可以知道SetFocus的作用,就是設(shè)置該控件為當(dāng)前的活動(dòng)控件,也就是激活這個(gè)控件的意思,如果不激活,那么只有手動(dòng)激活才可以使得子控件被激活,請(qǐng)求繪制,此時(shí)主窗口才會(huì)調(diào)用相應(yīng)的函數(shù)來(lái)重新繪制的。
去掉這個(gè),就會(huì)出現(xiàn)問(wèn)題。必須手動(dòng)的激活。。。
于是知道了這個(gè)函數(shù)的作用:
SetFocus的作用,就是激活某個(gè)控件,使得它成為活動(dòng)控件,導(dǎo)致被繪制或者其他的消息。
當(dāng)然,原書(shū)上是用一個(gè)成員m_edit作為控件,而我這里是自己做了一個(gè)EditBox控件,于是我想到了GetDlgItem的作用,就是獲得某個(gè)指定ID控件的指針,然后書(shū)上是:m_edit.SetFocus();而我這里就是一個(gè)指針對(duì)應(yīng)的調(diào)用SetFocus(),效果實(shí)際相同。成功!
下載地址:
http://www.pudn.com/detail.asp?id=1059826
posted on 2010-02-05 19:58
deercoder 閱讀(1227)
評(píng)論(0) 編輯 收藏 引用