Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以更改CMFCeditBrowsSectrl控件的背景色?_Mfc - Fatal编程技术网

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

是否可以更改CMFCeditBrowsSectrl控件的背景色?,mfc,Mfc,VS2015对话框MFC 我在对话框上实现了几个CMFCEditBrowseCtrl,并为浏览按钮自定义了行为: 是否可以在运行时有条件地将控件的编辑部分的背景设置为红色?需要时,将编辑背景设置回默认值 多谢各位 更新 我看到控件是从CEdit派生的,因此我将尝试一下: 上面的答案是正确的,但是没有正确实施CtlColor应返回画笔手柄。它还需要使用CDC::SetBkColor class cmfc_edit : public CMFCEditBrowseCtrl { public:

VS2015对话框MFC

我在对话框上实现了几个CMFCEditBrowseCtrl,并为浏览按钮自定义了行为:

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

多谢各位

更新 我看到控件是从CEdit派生的,因此我将尝试一下:

上面的答案是正确的,但是没有正确实施<代码>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:如果他们使用百叶窗。。。背景可能不是白色。我想我应该在
OnKillFocus