Search code examples
mfcvisual-studio-2015visual-c++-6

Upgraded MFC application still looks old


I have an MFC application written with VC6. I have upgraded it to VS2015 and it builds and runs. The application is a main exe with many DLL's that have dialogs in them.

However the application still looks like it is built with VC6. None of the GUI components have the Windows 7 look and feel, they all still look old style.

How can I make my existing application look more modern?


Solution

  • You should at least add this line to your project, for example add it to stdafx.h

    #pragma comment(linker,"\"/manifestdependency:type='win32' \
    name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
    processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    

    Or add the following to your manifest file:

    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    

    See also Enabling Visual Styles

    It gets more complicated for owner draw controls. See this reference: Using Visual Styles with Custom and Owner-Drawn Controls

    For ListView and TreeView controls, you can call this function for a more modern look (although it doesn't make any difference in Windows 10)

    SetWindowTheme(m_ListView.m_hWnd, L"Explorer", NULL);
    SetWindowTheme(m_TreeView.m_hWnd, L"Explorer", NULL);
    

    * #pragma comment is Visual Studio specific. For other compilers you need to modify the manifest file