函数:OnPaint()
函数:BOOL CPnrNavCtrlView::OnEraseBkgnd(CDC* pDC)
函数:HBRUSH CPnrNavCtrlView::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)
1、OnEraseBkgnd()可以用于绘制背景色
COLORREF m_crBackground;
CBrush m_wndbkBrush;
m_crBackground=RGB(146,182,237);//想要改成的颜色
m_wndbkBrush.CreateSolidBrush(m_crBackground);
CFormView::OnEraseBkgnd(pDC);//这里要看基类是什么就用哪个类.
CRect rect;
GetClientRect(rect);
pDC->FillRect(&rect,&m_wndbkBrush);
return TRUE;
这段儿代码也可以写到OnPaint中,效果一样。
2、OnCtlColor()可用于绘制控件颜色
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
//pDC->SetBkMode(TRANSPARENT);//设置与背景色相同
pDC->SetBkColor(RGB(146,182,237));//设置指定颜色
return(HBRUSH)GetStockObject(NULL_BRUSH);//返回空画刷,避免重画背景
}重载此方法,用于绘制客户区的控件。比如CFormView中的CStatic、CButton,绘制Dialog上的按钮,但是不影响客户区本身(例如View,Dialog)。
所以是否可以理解OnCtlColor是循环所有控件,并绘图?
以上两个组合起来,可以实现绘制界面背景色。不过在CFormView中,效果不好,主要是控件的背景色无法实现透明。
在Dialog中效果还好。
如果给控件赋值,比如CEdit、CButton:
赋值:m_edit.SetWindowText(_T("ss"));
获取值:1、获取整数:GetDlgItemInt(IDC_EDIT1);
2、获取字符串: CString UIText;
m_edit_AimPoint_X.GetWindowText(UIText);