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) 
...

MFC 对话框 背景色 CEdit

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部