是否可以更改 CMFCEditBrowseCtrl 控件的背景颜色?
Posted
技术标签:
【中文标题】是否可以更改 CMFCEditBrowseCtrl 控件的背景颜色?【英文标题】:Is it possible to change the background colour of a CMFCEditBrowseCtrl control? 【发布时间】:2016-04-02 20:20:38 【问题描述】:VS2015 对话框 MFC
我在我的对话框中实现了几个 CMFCEditBrowseCtrl,并带有 browse 按钮的自定义行为:
是否可以在运行时有条件地将控件的编辑部分的背景设置为红色?并在需要时将编辑的背景设置回默认?
谢谢。
更新 我看到控件是从 CEdit 派生的,所以我要试一试:
MFC: Changing the colour of CEdit
【问题讨论】:
【参考方案1】:上面link的答案是正确的方向,但是没有正确实现。 CtlColor
应该返回一个刷柄。还需要用CDC::SetBkColor
设置文字背景色
class cmfc_edit : public CMFCEditBrowseCtrl
public:
COLORREF bkcolor;
CBrush brush;
void setBrushColor(COLORREF clr)
bkcolor = clr;
brush.DeleteObject();
brush.CreateSolidBrush(clr);
HBRUSH CtlColor(CDC* pDC, UINT)
if (!brush.GetSafeHandle())
return GetSysColorBrush(COLOR_WINDOW);
pDC->SetBkColor(bkcolor);
return brush;
//optional, change color on focus change
void OnSetFocus(CWnd* w)
setBrushColor(RGB(255, 0, 0));
CMFCEditBrowseCtrl::OnSetFocus(w);
void OnKillFocus(CWnd* w)
setBrushColor(RGB(255, 255, 255));
CMFCEditBrowseCtrl::OnKillFocus(w);
DECLARE_MESSAGE_MAP()
;
BEGIN_MESSAGE_MAP(cmfc_edit, CMFCEditBrowseCtrl)
ON_WM_CTLCOLOR_REFLECT()
//optional
ON_WM_SETFOCUS()
ON_WM_KILLFOCUS()
END_MESSAGE_MAP()
用法:
mfc_edit.setBrushColor(RGB(255, 0, 0));
【讨论】:
感谢您的帮助! 只有当控件有焦点时才可以设置背景色?还是我需要问一个新问题? 谢谢。我明白了。我们如何确保在OnKillFocus
中它恢复为“默认”背景颜色? IE:如果他们使用 WindowsBlinds ...背景可能不是白色的。
我想我应该把GetSysColor(COLOR_WINDOW)
的默认颜色放在OnKillFocus
中以上是关于是否可以更改 CMFCEditBrowseCtrl 控件的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章