是否可以更改 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 控件的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

CMFCEditBrowseCtrl 闪烁的按钮图标

如何在 CMFCEditBrowseCtrl::EnableFileBrowseButton 中设置默认文件扩展名?

MFC 搜索编辑框

是否可以动态更改最大 Java 堆大小?

是否可以更改 QProgressBar 的高度?

是否可以更改检票口输出?