MFC app main window activation/deactivation painting issue

To reproduce this issue please follow these steps…

  1. Enable a non-Aero theme like Windows 7 Basic theme
  2. Create a new MFC application.
  3. Please make sure you’ve selected “Windows 7” for visual style and colors.
  4. Also you might notice that the issue is only reproducible when the application runs for the first time on a machine. This is because the value of visual style is read from the registry. So please edit the code in CMainFrame constructor likewise…
    Hard code the value to use “Windows 7” visual styling.
  5. Run the application.
  6. Try activating or deactivating
  7. You’ll see that the application title bar is not redrawn!

This is how the application looks like when deactivated…


This has been identified as a bug in MFC. This incorrect redrawing occurred under non-Aero themes only. We’ve found a workaround and the workaround is as follows…

Please derive a class from CMFCVisualManagerWindows7 and override OnNcActivate virtual method. For now lets call the class as CMyVisualManagerWindows7 derived from CMFCVisualManagerWindows7.

class CMyVisualManagerWindows7 : public CMFCVisualManagerWindows7
    virtual BOOL OnNcActivate(CWnd* pWnd, BOOL bActive)
        if (pWnd->GetSafeHwnd() != NULL)
            CMFCRibbonBar* pBar = GetRibbonBar(pWnd);
            if (pBar->GetSafeHwnd() == NULL || !pBar->IsWindowVisible() || !pBar->IsReplaceFrameCaption())
                return FALSE;
        return CMFCVisualManagerWindows7::OnNcActivate(pWnd, bActive);

Also in MainFrame.cpp please make sure CMyVisualManagerWindows7 is instantiated instead of its parent class CMFCVisualManagerWindows7 so that the derived class implementation of OnNcActivate takes effect.


This fixed the issue. Just in case you are facing a similar issue…

Comments (4)

  1. AA says:

    Not working – link failed

    MainFrm.obj : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass * __stdcall CMyVisualManagerWindows7::GetThisClass(void)" (?GetThisClass@CMyVisualManagerWindows7@@SGPAUCRuntimeClass@@XZ)

  2. BeavertonStorm says:

    Thank you!  I was experiencing this issue, and your fix worked great for me!  However, there is one line missing.  

    You need to add IMPLEMENT_DYNCREATE(CMyVisualManagerWindows7, CMFCVisualManagerWindows7)

    Add this line in a .cpp file somewhere.

  3. AA says:

    After inserting the missing, I have not problem linking the application. However, I still have the same issue as before – The title bar is missing after restoring from minimized state. The following link shows the exact problem I have in my application. Please help me to resolve this issue.…/titlebar-is-failed-in-mdi-mfc

    The sample application has no issue running in XP. The problem is only happened in Win7.

  4. AA,

    You may need to contact Microsoft CTS to get more in-depth developer support from us.  The workaround above has been shown to work for the known issue.  So if it doesn't work for you, you may have a different problem.


Skip to main content