在我的应用程序中,我有带有控件的CPaneDialog (例如文本控件)。我试图为这个CPanelDialog设置背景色。为此,我过多地写了OnEraseBkgnd
BOOL CBgPaneDialog::OnEraseBkgnd(CDC* pDC)
{
CBrush backBrush(RGB(255, 128, 128));
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // Erase the area needed
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}不幸的是,这个CPaneDialog上的控件有其他背景。text.png
我倒转了下一个方法: OnCtlColor设置控制的后背。
HBRUSH CBgPaneDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
CBrush br;
br.CreateSolidBrush(RGB(255,255,255));
HBRUSH hbr = (HBRUSH)br;
CWnd *pCheckBox = GetDlgItem(IDC_STATIC); // put ID of your checkbox here.
int a;
if (*pCheckBox == *pWnd)
{
br.DeleteObject();
br.CreateSolidBrush(a=pDC->SetBkColor(RGB(255, 128, 128)));
hbr = (HBRUSH)br;
}
else
hbr = CPaneDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;}
控件的背景已经改变,但没有完全改变。请参阅图片:textcontrol.jpg
如何为文本控件完全更改背景?
发布于 2015-04-10 16:36:02
不要归还临时刷子。您的代码可以用于OnEraseBkgnd(),因为它使用的是画笔,而不是返回它,但是对于OnCtlColor,请使用以下代码:
class CMyDialog ...
{
COLORREF BkColor;
CBrush BkBrush;
//...
};
CMyDialog::CMyDialog...
{
BkColor = RGB(0, 255, 255);
BkBrush.CreateSolidBrush(BkColor);
}
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//add conditions...
pDC->SetBkColor(BkColor);
return BkBrush;
}顺便说一句,你可以在你的问题中添加mfc标签,以便在将来得到更快的答案。
https://stackoverflow.com/questions/29077866
复制相似问题