# [VS C++ mit WinAPI] XP - Style funktioniert nicht



## Funjoy (15. Juli 2007)

Hallo,

Ich habe ein Problem, meinem Projekt ein Windows XP look zu verpassen. Ich habe schon jedes erdenkliche Tutorial gelsen wie z.B.
Verwenden von Visual styles
Using Windows XP Visual Styles
Manifest Dependencies in Visual Studio 2005
usw.

Jedoch funktioniert kein einziges!

Ich habe auch diese Methode probiert (ohne Erfolg):

```
#include <commctrl.h>
#pragma comment(lib,"Comctl32.lib")
//...
InitCommonControls();
//..
```

In einem Forum hatte ich mal eine einfaches Tutroial gelsen wie man ein Manifest zum Projekt hinzufügt. Dabei geht man so vor:

Ich erstelle ein Win32 (Anwendung) Projekt (Leer). Zum Projekt füge ich eine C++ Datei namens MessageBox.cpp ein. Die Datei beinhaltet folgenden Code:


```
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
				   PSTR szCmdLine, int iCmdShow)
{
	MessageBox (NULL, TEXT("Hello, WinAPI!"), TEXT("HelloMsg"),
		        MB_OK | MB_ICONQUESTION | MB_HELP);
	return 0;
}
```

Wie Ihr sicherlich schon erkennt, will ich nur einen stinknormale MSG Box ausgeben. Wenn ich jetzt Debugge kommt die gewünschte MSG Box jedoch im alten Windows look. Um jetzt zu versuchen den look in Windows XP zu bekommen gehe ich wie folgt vor.

Ich erstelle im Projekt ordner eine XML Datei die ich einfach mal xpstyle.xml nenne. In der Datei steht folgendes:


```
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>
```

Nun gehe ich wieder in Visual Studio, und unter *Projekt -> Eigenschaften (ALT + F7)* öffnet sich das Fenster für Projekteigenschaften. Hier wähle ich dann:
*Konfigurationseigenschaften -> Manifesttool -> Eingabe und Ausgabe -> Zusätzliche Manifestdateien* aus und füge dort meine xpstyle.xml Datei zu.

So das sollte ja eigentlich reichen, richtig? Visual Studio hat ja jetzt die xpstyle.xml Datei als Manifest eingebettet.

Demnach geh ich jetzt einfach wieder auf Debuggen und hoffe das es Funktioniert.
Visual Studio blinkt kurz auf und gibt mir keine MSG Box aus aber auch keine Fehlermeldung.

Hier mal ein Auszug aus der Debug Ausgabe:

```
"MessageBox.exe": "D:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\debug\MessageBox.exe" geladen, Symbole wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\ntdll.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\kernel32.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\user32.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\gdi32.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll" geladen, Symbole wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\msvcrt.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\imm32.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\advapi32.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\rpcrt4.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\uxtheme.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\MSCTF.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\version.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\version.dll" entladen.
"MessageBox.exe": "D:\WINDOWS\system32\MSCTFIME.IME" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\ole32.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\system32\shlwapi.dll" geladen, Exporte wurden geladen.
"MessageBox.exe": "D:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll" entladen.
"MessageBox.exe": "D:\WINDOWS\system32\shlwapi.dll" entladen.
Das Programm "[292] MessageBox.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
```

Da scheint alles ok zu sein oder?

Hier noch der Inhalt der BuildLog.htm Datei:


> Buildprotokoll
> 
> 
> Erstellen wurde gestartet: Projekt: "MessageBox", Konfiguration: "Debug|Win32"
> ...



Hoffe einer von euch weiß Rat, den ich bin nämlich mit mein Latein am Ende -.-

Hier noch zur Information, ich habe mir das SP2 für Visual Studio runtergeladen. 

Ich denke das mir irgendeine Datei fehlt bei einem Freund klappt es beispielsweise einfach so das er folgende zeilen an den Präprozessor gibt:


```
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
```

Bei dem Code Passiert das gleiche als wenn ich eine XML Datei als Manifest einbette, nämlich garnichts!

Habe Windows XP Prof als Betriebssystem.

Gruß Funjoy


----------

