是否可以更改CMFCEditBrowseCtrl控件的背景颜色?

时间:2016-04-02 20:20:38

标签: mfc

VS2015 Dialog MFC

我的对话框中实现了几个 CMFCEditBrowseCtrl ,其中包含浏览按钮的自定义行为:

CMFCEditBrowseCtrl dialog

是否可以在运行时有条件地将控件的编辑部分的背景设置为红色?并在需要时将编辑背景设置回默认

谢谢。

更新 我看到控件来自 CEdit ,所以我试试这个:

MFC: Changing the colour of CEdit

1 个答案:

答案 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));