À l'aide de l'API Windows, comment puis-je m'assurer que les contrôles conservent une apparence native?

StackOverflow https://stackoverflow.com/questions/111630

Question

Certains des contrôles que j'ai créés semblent utiliser l'ancien thème Windows 95 par défaut. Comment puis-je empêcher cela? Voici un exemple de bouton qui ne conserve pas l'apparence native du système d'exploitation (j'utilise Vista comme environnement de développement):

HWND button = CreateWindowEx(NULL, L"BUTTON", L"OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                  170, 340, 80, 25, hwnd, NULL, GetModuleHandle(NULL), NULL);

J'utilise le C ++ natif avec l'API Windows, pas de code géré.

Était-ce utile?

La solution

Je pense que cela n'a rien à voir avec votre code, mais vous devez configurer un fichier manifeste approprié pour obtenir les contrôles thématiques.

Quelques informations ici: @ msdn.com et ici: @ blogs.msdn.com

Vous pouvez voir une différence entre application avec et sans manifeste ici: heaventools.com

Autres conseils

Pour ajouter un manifeste à l'application, vous devez créer un fichier MyApp.manifest et l'ajouter au fichier de ressources de l'application:

//-- This define is normally part of the SDK but define it if this 
//-- is an older version of the SDK.
#ifndef RT_MANIFEST
#define RT_MANIFEST              24
#endif

//-- Add the MyApp XP Manifest file
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyApp.manifest"

Dans les versions plus récentes de Visual Studio , un onglet Outil de manifeste se trouve dans les paramètres du projet et le champ Autres fichiers de manifeste figurant dans celui-ci. Cet onglet peut également être utilisé pour définir le fichier manifeste.

Voici un fichier MyApp.manifest simple pour une application Win32:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.1"
    processorArchitecture="X86"
    name="Microsoft.Windows.MyApp"
    type="win32"
/>
<description>MyApp</description>
</assembly>

Si votre application dépend des autres dll, ces détails peuvent également être ajoutés au manifeste et Windows utilisera ces informations pour garantir que votre application utilise toujours les versions correctes de ces dll dépendantes.

Par exemple, voici les détails de la dépendance du manifeste pour les bibliothèques d'exécution du contrôle commun et de la version 8.0 C:

<dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="X86"
        publicKeyToken="6595b64144ccf1df"
        language="*"
    />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity
        type="win32"
        name="Microsoft.VC80.CRT"
        version="8.0.50608.0"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b" />
</dependentAssembly>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top