2009-03-11 10 views
0

Wir haben gerade unsere C++ - MFC-Anwendung von VS2005 zu VS2008 gewechselt. Unglücklicherweise hat unsere Benutzeroberfläche Probleme mit dem Aussehen, mit Dingen wie Gruppenkästen, die blau statt schwarz erscheinen, Eigenschaften, die einen weißen Hintergrund haben. Ich nehme an, dass MFC in VS2008 geändert wurde, um das OS-Thema zu respektieren (in meinem Fall XP-Standard) Thema). Leider wird es viel Arbeit erfordern, all unsere Steuerelemente und unsere benutzerdefinierten Symbolleisten zu ändern, um die App wieder anständig aussehen zu lassen.Deaktivieren Sie XP Theme in VS2008 kompilierte MFC App

Also, weiß jemand, ob es einen Weg im Code gibt, um die App zurück in VS2005-Modus zu setzen? Ich fand den folgenden Code

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); 

, die die XP-Design stoppt abgeholt, aber alle Themen schaltet sich aus und lässt die Anwendung suchen, um mehr datiert, als es in VS2005 tat.

dank

Antwort

2

Es kann sein, dass VS2008 eine Manifest Datei im Projekt einschließlich, die die Version 6.0 comctl32.dll anstatt die 5,82 comctl32.dll laden ... beide Schiff mit Windows XP und höher.

+0

Hallo, ich habe unsere Manifest-Datei überprüft und es gab einen Verweis auf commctl32 v6, der nicht in unserem vs2005-Manifest war. Ich entfernte das und es machte keinen Unterschied. Ich habe versucht, v5.82 der comctl32.dll zu referenzieren, aber meine App startet nicht. Hast du ein Beispielmanifest (version/publickeytoken info)? –

+0

Leider nicht. Ich benutze normalerweise nicht C++. Ich habe mich nur mit Manifest-Dateien beschäftigt, nachdem ich auf Anfrage eines Clients etwas von Java in eine kompilierte ausführbare Datei umgewandelt hatte, und die kompilierte Version endete mit der älteren comctl32.dll, die geladen wurde, als sie die neuere hatte. – Powerlord

+0

Sie sollten Ihre 'stdafx.h' Datei überprüfen. Die Manifest-Referenz kann auch dort gefunden werden. Sie können versuchen, die Manifest-Version zu ändern, aber es gibt ein 'publicKeyToken', das vermutlich ebenfalls geändert werden muss. – djeidot

1

Setzen Sie unter "Eigenschaften-> Konfigurationseigenschaften-> Linker-> Manifestdatei" die Option "Manifest erstellen" auf "Nein".

Fügen Sie dann Ihre eigene Manifest-Datei hinzu, wenn Sie möchten, und legen Sie sie unter "Eigenschaften-> Konfigurationseigenschaften-> Manifest-Tool-> Eingabe und Ausgabe", "Eingabe-Ressourcenmanifest" fest.

Stellen Sie nur sicher, dass wenn Sie Ihre eigene Manifest-Datei hinzufügen, dass es den Verweis auf Commctl32 v6 nicht enthält.

Verwandte Themen