首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPaneDialog控件后台(文本控件)

CPaneDialog控件后台(文本控件)
EN

Stack Overflow用户
提问于 2015-03-16 13:20:10
回答 1查看 287关注 0票数 1

在我的应用程序中,我有带有控件的CPaneDialog (例如文本控件)。我试图为这个CPanelDialog设置背景色。为此,我过多地写了OnEraseBkgnd

代码语言:javascript
复制
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设置控制的后背。

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 16:36:02

不要归还临时刷子。您的代码可以用于OnEraseBkgnd(),因为它使用的是画笔,而不是返回它,但是对于OnCtlColor,请使用以下代码:

代码语言:javascript
复制
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标签,以便在将来得到更快的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29077866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档