VC 对话框背景色覆盖CEdit背景色的解决方法
清泛原创
对话框不设置背景色时,CEdit自绘背景色正常(CEdit自绘请参考《MFC CEdit自绘、MFC圆角输入框》),但是对话框如何在OnCtlColor中设置背景色(返回HBRUSH画刷)时,CEdit的背景色会被覆盖,而且再怎么绘制CEdit的背景色也无效,如图:
其实设置了CEdit背景色为白色
解决方法:
在OnCtlColor设置对话框背景色时,对Edit控件进行例外处理,即使用原色,代码如下:
//页面背景色
HBRUSH CDemoView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何特性
//不变色
if (nCtlColor == CTLCOLOR_EDIT)
return hbr;
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return m_brushBg;
}
这样,所有的Edit控件背景色自绘生效,如图:
控件类型的宏定义:
CTLCOLOR_BTN 按钮控件CTLCOLOR_DLG 对话框CTLCOLOR_EDIT 编辑框CTLCOLOR_LISTBOX 列表框CTLCOLOR_MSGBOX 消息框CTLCOLOR_SCROLLBAR 滚动条CTLCOLOR_STATIC 静态文本
当然也可以对指定ID的单个控件进行特殊设置:
if(pWnd->GetDlgCtrlID() == IDC_STATIC1)
...
上一篇:VC中点击任务栏让窗口最小化问题解决
下一篇:VC中CStatic等控件字体颜色的设置和OnCtlColor的使用