cformview改变背景色后的问题

时间:2020-12-13 14:48:23
我创建了一个MyFormView类,继承自CFormView类。通过响应WM_CTLCOLOR消息改变了MyFormView的背景色。但是上面的控件颜色也改变了。如下:
cformview改变背景色后的问题
背景色是蓝色的。当使编辑框控件不可用时,它就变成黑色的了,而不是像它旁边的spin控件变成灰色。我希望编辑框控件还像没有改变MyFormView背景色之前那样,当不可用的时候是灰色,请问应该怎么改变。check控件也是这样,变成黑色了。其他控件还好,没什么变化。
下面是我响应WM_CTLCOLOR消息里的代码:
HBRUSH MyFormView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO:  在此更改 DC 的任何属性

// TODO:  如果默认的不是所需画笔,则返回另一个画笔
 
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);   
return   (HBRUSH)::GetStockObject(NULL_BRUSH);   
}
hbr =(HBRUSH)CreateSolidBrush(RGB(210,230,250)); 
return hbr;
}

4 个解决方案

#1


该回复于2011-01-17 13:44:06被版主删除

#2


没人么~

#3


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#4


还没人呢,我自己来吧。都把这个帖子忘了。自己解决了。写一下,有人用的到就看看。
//设置背景色
HBRUSH CLineSymbolView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO:  在此更改 DC 的任何属性

// TODO:  如果默认的不是所需画笔,则返回另一个画笔
 
pDC->SetBkMode(TRANSPARENT);
hbr =(HBRUSH)CreateSolidBrush(RGB(210,230,250)); 

if (nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(WHITE_BRUSH);  // 设置背景色

}
return hbr;
}

看上去区别不大

#1


该回复于2011-01-17 13:44:06被版主删除

#2


没人么~

#3


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#4


还没人呢,我自己来吧。都把这个帖子忘了。自己解决了。写一下,有人用的到就看看。
//设置背景色
HBRUSH CLineSymbolView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO:  在此更改 DC 的任何属性

// TODO:  如果默认的不是所需画笔,则返回另一个画笔
 
pDC->SetBkMode(TRANSPARENT);
hbr =(HBRUSH)CreateSolidBrush(RGB(210,230,250)); 

if (nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(WHITE_BRUSH);  // 设置背景色

}
return hbr;
}

看上去区别不大