使用OnCtlColor函数消息打造背景
使用OnCtlColor函數消息打造背景
在MFC類庫提供了CWnd::OnCtlColor函數,在工作框架的子窗口被重畫時將調用該成員函數.因此可以重載WM_CTLCOLOR消息的響應函數.此函數的原型:
afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd*pWnd,UINT nCtlColor);
參數nCtlColor用于指定控件的類型,可以是:
.CTLCOLOR_BT???????? 按鈕
.CTLCOLOR_DLG??????? 對話框??????????
.CTLCOLOR_EDIT ??????編輯框???
.CTLCOLOR_LISTBOX? ?列表控件
.CTLCOLOR_MSGBOX?? 消息控件
.CTLCOLOR_SCROLLBAR ?滾動條
.CTLCOLOR_STATIC?? 靜態控件
為窗體添加該響應消息,重載OnCtlColor函數,下面舉幾個例子說明:
[例1]
為My的對話框工程,有一個STATIC的控件,ID為IDC_STATIC1.
HBRUSH CTtDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
??? HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
??? // TODO: Change any attributes of theDC here
??? if (nCtlColor == CTLCOLOR_STATIC)
??? {
?????? pDC-> SetTextColor(RGB(255,0,0));//字體顏色
?????? pDC-> SetBkColor(RGB(0, 0,255)); //字體背景色??
??? }
??? // TODO: Return a different brush ifthe default is not desired
??? return hbr;
}
如果要指定某個特定控件可以這樣寫:ID為IDC_STATIC1
if (pWnd-> GetDlgCtrlID()==IDC_STATIC1)
{
??? pDC-> SetTextColor(RGB(255,0,0));? //設置字體顏色
??? pDC-> SetBkMode(TRANSPARENT);???? //設置字體背景為透明
???? ?//??? return (HBRUSH)::GetStockObject(BLACK_BRUSH);// 設置背景色
}
else
return hbr;
【注】
GetStockObject(fnObject):該函數檢索預定義的備用筆、刷子、字體或者調色板的句柄。
BLACK_BRUSH:黑色
WHITE_BRUSH:白色
GRAY_BRUSH:灰色
NULL_BRUSH:透明(相當于HOLLOW_BRUSH)
HOLLOW_BRUSH :透明
BLACK_PEN:黑色鋼筆;
WHITE_PEN:白色鋼筆;
ANSI_FIXED_FONT:在Windows中為固定間距(等寬)系統字體;
ANSI_VAR_FONT:在Windows中為變間距(比例間距)系統字體;
[舉例2]? 為對話框設置背景顏色
CBrush m_Brush;
m_Brush.CreateSolidBrush(RGB(255,0,0));
HBRUSH CTest123Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
??? if (nCtlColor == CTLCOLOR_DLG )
??????? return (HBRUSH)m_Brush.GetSafeHandle();
??? return CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
}
[舉例3]為對話框設置背景圖片
CBrush m_Brush;
CBitmap* pBitmap = new CBitmap;
ASSERT(pBitmap);
pBitmap->LoadBitmap(IDB_BACKGROUD);
m_Brush.CreatePatternBrush(pBitmap);
HBRUSH CTest123Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
???? if (nCtlColor == CTLCOLOR_DLG )
?????????? return(HBRUSH)m_Brush.GetSafeHandle();
??? return CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
}
?
總結
以上是生活随笔為你收集整理的使用OnCtlColor函数消息打造背景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vc得到屏幕的当前分辨率方法
- 下一篇: VC星号密码查看器源码