在我的应用程序中,我有带有控件(例如文本控件)的 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 上的控件有其他背景。 http://fotoo.pl//out.php?t=964580_text.png
我覆盖了下一个方法: OnCtlColor 来设置 caontrol 的背景。
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;
}
控件的背景已更改,但未完全更改。请看图片: http: //fotoo.pl//out.php?i=964579_textcontrol.jpg
如何完全更改文本控件的背景?