2009-03-11 4 views
0

Nous venons de passer notre application C++ MFC de VS2005 à VS2008. Malheureusement, notre interface a des problèmes d'apparence, avec des choses comme les boîtes de groupe apparaissant en bleu plutôt qu'en noir, les boîtes de dialogue de propriétés ayant un fond blanc etc. Je suppose que dans VS2008, MFC a été modifié pour respecter le thème OS thème). Malheureusement, changer tous nos contrôles et nos barres d'outils personnalisées pour rendre l'application encore plus décente va demander beaucoup de travail. Donc, est-ce que quelqu'un sait s'il y a un moyen dans le code de remettre l'application en mode VS2005? J'ai trouvé le code suivantDésactiver le thème XP dans l'application MFC compilée VS2008

typedef void (WINAPI *tSetThemeAppProperties)( DWORD); 

tSetThemeAppProperties pSetThemeAppProperties=0; 
HINSTANCE handle = ::LoadLibrary("UxTheme.dll"); 

if (handle) 
    pSetThemeAppProperties = (tSetThemeAppProperties) ::GetProcAddress(handle,"SetThemeAppProperties"); 


if (pSetThemeAppProperties) 
{ 
    // call function 
    pSetThemeAppProperties(0/*dwFlags*/); 
} 
::FreeLibrary(handle); 

Ce qui fait arrêter le thème XP étant ramassé, mais désactive tous les thèmes et laisse l'application recherche plus datée qu'il a fait dans VS2005.

grâce

Répondre

2

Il se peut que VS2008 est d'inclure un fichier Manifest dans le projet qui charge la version 6.0 comctl32.dll plutôt que 5,82 comctl32.dll ... deux navires avec Windows XP et plus récent.

+0

Salut, j'ai vérifié notre fichier manifeste et il y avait une référence à commctl32 v6 qui n'était pas dans notre manifeste vs2005. J'ai enlevé ceci et cela n'a fait aucune différence. J'ai essayé de référencer v5.82 du comctl32.dll mais mon application ne démarre pas. Avez-vous un exemple de manifeste (version/publickeytoken info)? –

+0

Malheureusement, je ne le fais pas. Je n'utilise généralement pas C++. J'ai seulement traité des fichiers manifestes après avoir converti quelque chose de Java en un exécutable compilé sur la demande d'un client, et la version compilée s'est retrouvée avec l'ancien comctl32.dll chargé quand il aurait dû avoir le plus récent. – Powerlord

+0

Vous devriez vérifier votre fichier 'stdafx.h'. La référence manifeste peut également être trouvée ici. Vous pouvez essayer de changer la version du manifeste, mais il y a un 'publicKeyToken' que je suppose qu'il faudra aussi changer. – djeidot

1

Sous "Propriétés-> Propriétés de configuration-> Lieur-> Fichier manifeste", définissez l'option "Générer le manifeste" sur "Non".

Ensuite, ajoutez votre propre fichier manifeste si vous le souhaitez et réglez-le sous "Propriétés-> Propriétés de configuration-> Outil Manifeste-> Entrée et sortie", "Manifeste des ressources d'entrée". Assurez-vous que si vous ajoutez votre propre fichier manifeste, celui-ci ne contient pas la référence à commctl32 v6.

Questions connexes