VS2015 Dialog MFC
我的对话框中实现了几个 CMFCEditBrowseCtrl ,其中包含浏览按钮的自定义行为:
是否可以在运行时有条件地将控件的编辑部分的背景设置为红色?并在需要时将编辑背景设置回默认?
谢谢。
更新 我看到控件来自 CEdit ,所以我试试这个:
答案 0 :(得分:2)
上面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));