可以通过处理WM_ERASEBKGND消息来改变CView、CFrameWnd或CWnd对象的背景色。请看如下的程序段:
BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{
// 设置所要求背景色的刷子
CBrush backBrush(RGB(255, 128, 128));
// 保存旧刷子
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // 擦除所需的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}
而我则用如下方法解决这个问题:
HBRUSH dlgtest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor)
{
case CTLCOLOR_BTN:
case CTLCOLOR_STATIC:
{
pDC->SetBkMode(TRANSPARENT);
}
case CTLCOLOR_DLG:
{
CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);
}
}
return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));
}
本文介绍如何通过处理WM_ERASEBKGND消息或使用OnCtlColor方法来更改MFC应用程序中视图或对话框的背景颜色。提供具体代码实例展示如何实现不同组件背景色的自定义。
2548

被折叠的 条评论
为什么被折叠?



