XP Style



  • Hallo, ihr hört es bestimmt oft, aber ich möchte bei meinen C++ Anwendungen den XP Style einbauen. Aber wenn ich das Manifest miteinkompiliere oder als Anwendung.exe.manifest beilege, funktioniert das Prog nur auf manchen XPs.. Bei manchen ist der XP Style da, bei anderen kommt nur ein Windows-Pling aus den Boxen und das Prog startet gar nicht. Im Internet steht, dass das passieren kann, wenn in WinMain InitCommonControls() oder InitCommonControlsEx() nicht aufgerufen wird.
    Deshalb habe ich das ausprobiert:

    #include <windows.h>
    #include <commctrl.h>
    #pragma comment( lib, "comctl32.lib" )
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	InitCommonControls();
    	MessageBox(NULL, lpCmdLine, "Parameter", MB_OK | MB_ICONINFORMATION);
    	return 0;
    }
    

    Bei diesem Code gibt der Compiler aus:
    .objs\main.o:main.cpp:(.text+0x7): undefined reference to `InitCommonControls@0'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)

    Was mache ich falsch?



  • 1. Verwende einen gescheiten Compiler
    2. Rufe InitCommonControlsEx mit den passenden Parametern auf...



  • 2. Rufe InitCommonControlsEx mit den passenden Parametern auf...

    Und welche sind die?



  • Ich habe gegoogelt und das gefunden:

    INITCOMMONCONTROL initControl;
    initControl.dwSize = sizeof(initControl);
    initControl.dwICC = ICC_USEREX_CLASSES|ICC_LISTVIEW_CLASSES;
    InitCommonControl(&initControl);
    

    Aber der compiler sagt: error: `INITCOMMONCONTROL' undeclared (first use this function)
    Kann es sein, dass INITCOMMONCONTROL nur in ms visual c geht?

    Im ganzen Beitrag INITCOMMONCONTROL ersetzen durch INITCOMMONCONTROL und S und E und X, da es sonst als Spam angesehen wird 🙄



  • Hi,

    vergiss das mit dem Manifest Gefummel. Da du Dev-C++ benutzt, musst du einfach unter folgendem Menüpunkt den XP Style aktivieren:

    Projekt ➡ Projekt Optionen ➡ Windows XP Themen unterstützen

    ...natürlich musst du vorher ein Projekt angelegt haben !

    MfG mikey.



  • Hallo, ich verwende codeblocks.
    Weiss jemand wie ich diesen Typ herbekomme: INITCOMMONCONTROLS und EX ?



  • Hallo, ich verwende codeblocks.

    ....dachte ich mir, verwendet auch den GCC. Dann musst du eben auf den Menüpunkt gehen, (falls du den Nightly Build hast):

    Plugins ➡ Windows XP Look 'n Feel



  • Hi,
    tja, das habe ich schon probiert.. Dann erstellt er nur die .exe.manifest Datei. Ich zitiere mich selber:

    Aber wenn ich das Manifest miteinkompiliere oder als Anwendung.exe.manifest beilege, funktioniert das Prog nur auf manchen XPs.. Bei manchen ist der XP Style da, bei anderen kommt nur ein Windows-Pling aus den Boxen und das Prog startet gar nicht. Im Internet steht, dass das passieren kann, wenn in WinMain InitCommonControls() oder InitCommonControlsEx() nicht aufgerufen wird.

    Deshalb muss ich INITCOMMONCONTROLS und EX definieren, da es nirgends, auch nicht in den ganzen dateien im include ordner, definiert ist.



  • Ich habs gelesen, bin aber davon ausgegangen, dass du es händisch gemacht hast, und dir deshalb irgendein Fehler unterlaufen ist, sorry deswegen.



  • Ich kann dir jetzt nurnoch sagen, wie du die Bibliothek "comctl32.lib" beim GCC (verwendet C::B) linkst. Denn GCC kennt den pragma - Befehl "comment" nicht, weswegen du die Library manuell unter Code::Blocks linken musst. Navigiere einfach zum folgendem Menüpunkt, und linke "comctl32.lib" zum Projekt hinzu, so bekommst du wenigstens keinen Linkererror mehr:

    Project ➡ Build Options ➡ Zweites Dropdownmenü von oben ➡ Linker Settings ➡ Bei "Link Libraries" auf Add klicken

    Dann navigierst du zum "lib" - Ordner, der sich im Installationsverzeichnis von Code::Blocks befindet, und wählst dort die Library "comctl32.lib" aus. Um die richtige Initialisierung von InitCommonControls(); musst du dich dann selber kümmern, da ich mich damit nicht auskenne.

    MfG mikey.



  • Hi, jetzt gehts! Danke.
    Allerdings heisst die lib datei 'libcomctl32.a'.



  • Designer schrieb:

    Hi,
    tja, das habe ich schon probiert.. Dann erstellt er nur die .exe.manifest Datei. Ich zitiere mich selber:

    Aber wenn ich das Manifest miteinkompiliere oder als Anwendung.exe.manifest beilege, funktioniert das Prog nur auf manchen XPs.. Bei manchen ist der XP Style da, bei anderen kommt nur ein Windows-Pling aus den Boxen und das Prog startet gar nicht. Im Internet steht, dass das passieren kann, wenn in WinMain InitCommonControls() oder InitCommonControlsEx() nicht aufgerufen wird.

    Deshalb muss ich INITCOMMONCONTROLS und EX definieren, da es nirgends, auch nicht in den ganzen dateien im include ordner, definiert ist.

    Wie wäre es, wenn du einfach mal in der MSDN nachschaust...



  • Hi, jetzt gehts! Danke.
    Allerdings heisst die lib datei 'libcomctl32.a'.

    hab ich's doch gewusst 😉

    MfG mikey.


Anmelden zum Antworten