有弹出窗口时保留CMFCEditBrowseCtrl背景色

时间:2018-10-30 10:11:00

标签: mfc

所以我有一个很好的答案,它解释了如何在焦点对准CMFCBrowseEditCtrl时将背景色设置为

https://stackoverflow.com/a/36394562/2287576

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()
};

它工作正常,我对此没有任何问题。唯一的问题是当我调用弹出窗口时。由于弹出窗口现在具有焦点,因此我设置的背景突出显示被重置为默认设置。即使显示弹出窗口,也可以保留请求的背景吗?

因此,我只希望编辑控件在具有焦点时具有黄色背景,并在激活弹出窗口时保留该背景。当我移到对话框上的另一个控件时,黄色也应该消失。

这可能吗?

1 个答案:

答案 0 :(得分:1)

这有效:

void CChristianLifeMinistryStudentEdit::OnKillFocus(CWnd* pNewWnd)
{
    if(GetParent()->IsChild(pNewWnd))
        SetBrushColour(GetSysColor(COLOR_WINDOW));
    CMFCEditBrowseCtrl::OnKillFocus(pNewWnd);
}