2

So I have this excellent answer that explains how to set the background colour to a CMFCBrowseEditCtrl when it is in focus:

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

It works fine and I have no issues with it. The only problem is when I invoke a popup window. Since the popup window now has focus the background highlight I had set is being reset to the default. Is it possible to retain the requested background even when a popup window is displayed?

So, I only want my edit control to have a yellow background when it has focus, and retain this background whilst a popup window is activated. The yellow should also go when I move to another control on the dialog.

Is this possible?

Andrew Truckle
  • 17,769
  • 16
  • 66
  • 164

1 Answers1

1

This works:

void CChristianLifeMinistryStudentEdit::OnKillFocus(CWnd* pNewWnd)
{
    if(GetParent()->IsChild(pNewWnd))
        SetBrushColour(GetSysColor(COLOR_WINDOW));
    CMFCEditBrowseCtrl::OnKillFocus(pNewWnd);
}
Andrew Truckle
  • 17,769
  • 16
  • 66
  • 164