CPaneDialog控件背景(文本控件)

时间:2015-03-16 13:20:10

标签: c++ visual-studio-2008 background txtextcontrol

在我的应用程序中,我有CPaneDialog和控件(例如Text控件)。我尝试为此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的backgorund。

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

如何完全更改文本控件的背景?

1 个答案:

答案 0 :(得分:1)

不要回来临时刷。您的代码可以用于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标记,以便日后获得更快的答案。