Anzeige

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

Funjoy

Erfahrenes Mitglied
#1
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):
C++:
#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:

C++:
#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:

Code:
<?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:
Code:
"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"

Befehlszeilen


Die temporäre Datei "d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\RSP00000840163936.rsp" wird erstellt. Inhalt:
[
/out:".\debug\MessageBox.exe.embed.manifest" /notify_update /manifest ".\xpstyle.xml"

".\debug\MessageBox.exe.intermediate.manifest"
]Erstellen der Befehlszeile "mt.exe @"d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\RSP00000840163936.rsp" /nologo"Die temporäre Datei "d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\BAT00000940163936.bat" wird erstellt. Inhalt:
[
@echo, die Manifestressource wurde zuletzt um %TIME% am %DATE% aktualisiert > ".\debug\mt.dep"
]Erstellen der Befehlszeile """d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\BAT00000940163936.bat"""Die temporäre Datei "d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\TMP00000A40163936.tmp" wird erstellt. Inhalt:
[
1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ ".\\Debug\\MessageBox.exe.embed.manifest"
]Erstellen der Befehlszeile "rc.exe /fo".\Debug\MessageBox.exe.embed.manifest.res" "d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\TMP00000A40163936.tmp""
Die temporäre Datei "d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\RSP00000B40163936.rsp" wird erstellt. Inhalt:
[
/OUT:"D:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\Debug\MessageBox.exe" /INCREMENTAL /MANIFEST /MANIFESTFILE:"Debug\MessageBox.exe.intermediate.manifest" /DEBUG /PDB:"d:\dokumente und einstellungen\ise3u\eigene dateien\visual studio 2005\projects\messagebox\debug\MessageBox.pdb" /SUBSYSTEM:WINDOWS /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

".\debug\MessageBox.obj"

".\Debug\MessageBox.exe.embed.manifest.res"
]Erstellen der Befehlszeile "link.exe @"d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\RSP00000B40163936.rsp" /NOLOGO /ERRORREPORT:pROMPT"

Ausgabefenster


Das Manifest wird eingebettet...

Ergebnisse


Das Buildprotokoll wurde unter "file://d:\Dokumente und Einstellungen\iSe3U\Eigene Dateien\Visual Studio 2005\Projects\MessageBox\MessageBox\Debug\BuildLog.htm" gespeichert.
MessageBox - 0 Fehler, 0 Warnung(en)
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:

C++:
#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
 
Anzeige

Neue Beiträge

Anzeige