Resolve an Issue with Common Controls in a Windows App

Project Description

We have an issue in a Windows application. The app was originally built with Visual Studio 2005. Migration was done to a new development environment (and from x86 to x64). The problem is that visual interface elements such as buttons now look a bit different. We need help with determining why it happened and with a fix.

Completion Notes

Let's see what the problem is first. This is how the buttons look in the original application on Windows 7.

Original buttons with rounded corners
Original buttons with rounded corners

And here is how new buttons look. You can see that the app lost nice rounded corners.

New buttons are not rounded
New buttons are not rounded

Is the problem specific to Windows 7 only? Let's try Windows 8.

Original buttons on Windows 8
Original buttons on Windows 8


New buttons on Windows 8
New buttons on Windows 8

How about Windows 10?

Original buttons on Windows 10
Original buttons on Windows 10


New buttons on Windows 10
New buttons on Windows 10

As we can see, the buttons look different on all the above mentioned operating systems. Apparently, customer is looking at attempting to recover the original look, if possible.

Application Manifest

According to this, it looks like the problem may be related to an application manifest. If we examine the original application manifest, we can see this:

<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="*"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
  </dependentAssembly>
</dependency>
The new app uses automatically-generated manifests (by Visual Studio 2015). It could be our problem that needs fixing.

An alternative way to using a manifest is a compiler directive, as explained in the above mentioned article. Let's try to include something like this in one of our source files.

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
It turns out that the above fixes our problem.

However, for a cleaner fix, one should probably create a manifest file anyway. This gets us a single clearly documented place for all things that belong in there.

You can leave a comment on this project, or post a new project for consideration.