Win32 Resource styles



  • Hey Leute,ich wollte mal fragen ob man die ganzen Boxen wie Button,Listbox,... mit dem Win7 style hinbekommen kann.Ich hab mit CreateWindow ein Button erstellt und die folgenden styles eingefügt: WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON

    Kann man die Buttons oder alles andere so schön machen wie z.b die Buttons im Win7 Rechner??Die anderen sehen aus wie Windows 95 Buttons

    Danke





  • Ok bei der Site sieht man die Manifest dateinen ,aber so ganz versteh ich nicht ,wei man das machen soll.

    Bitte um Hilfe 🙂



  • Eine Möglichkeit ist hier beschrieben:
    http://www.c-plusplus.net/forum/187370

    Damals mit WinXP wurden die Themes eingeführt.

    HTH,
    Martin



  • Wobei ich das nicht unbedingt mit nem pragma im Code machen würde sondern einfach in den Linkereinstellungen unter Manifest File > Additional Manifest Dependencies entsprechend eintragen würde.



  • Danke für die Antworten

    Ich hab das einfach mal vom Link kopiert und nach main.cpp eingetrage.Da steht jetzt am Anfang:

    #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
    
    #include "stdafx.h"
    #include <commctrl.h> 
    #pragma comment(lib, "comctl32.lib")
    #include "Resource.h"
    #include "Data.h"
    //.......................
    

    In WinMain hab ich jetzt nach dem WNDCLASSEX den einen Behler eingetragen,und ich hab immernoch das gleiche...

    Hab ich da irgendwas falsch gemacht? 😕



  • Es fehlt bei dir wahrscheinlich noch ein Aufruf von InitCommonControls(); Dies kann bspw. in der WinMain vor dem Erstellen des Fensters geschehen.

    Edit: oder meinst du mit "den einen Behler eingetragen" genau diesen Aufruf?



  • Ja das meinte ich mit dem Befehl da:D
    😃



  • Man soll InitCommonControlsEx() nutzen (Auch wenn's ohne Ex funktioniert, was es laut Doku aber eigentlich nicht sollte).



  • Das ist merkwürdig, eigentlich sollte der Aufruf von InitCommonControls(Ex) nicht wirklich notwendig sein.



  • hmm ich hab das jetzt mit verschiedenen #pragma comment(linker........ codes probiert ,aber es will einfach nicht gehen.

    Gibt es da eine anderen Möglichkeit um an ein Win7 style ranzukommen??

    Edit:Endlich ich hab es rausbekommen.Man erstellt sich eine neue manifest datei mit dem inhalt:

    <?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="*"
    publicKeyToken="6595b64144ccf1df"
    language="*"
    />
    </dependentAssembly>
    </dependency>
    </assembly>
    

    dan geht man bei VC++ unter Projekt/Projekt Properties/Configuration Properties/Manifest Tool und gibt diese datei unter additional minefest file an.


  • Mod

    #pragma comment(linker,"/manifestdependency...
    

    Geht auch und ist in jedem Fall der bessere Weg...



  • Oder wie gesagt du schreibst es unter Linker > Manifest > Additional Manifest Dependencies rein.

    Rein aus Interesse: Hat die #pragma Methode gegenüber dem einfachen Eintragen in den Linkereinstellungen eigentlich irgendwelche speziellen Vorteile? Ich hab das früher auch manchmal so gemacht aber damit aufgehört weil ich finde dass sowas in mein Buildsystem gehört und nicht irgendwo über meinen Code verstreut...


  • Mod

    Warum gehört das ins Buildsystem? Ich möchte Code schreiben der bestimmt wie er auch funktioniert.
    Wenn ich also im Code ein Manifest oder die Nutzung einer LIB (codenah) definieen kann, dann ist dies ein Vorteil.

    Schreibe ich also ein Stück Code, dass die Common Control 6.0 Library benutzen möchte, dann sollte dieser Code auch das bestimmen.
    Nicht wenige Nachrichten gibt es nur in der Comon Control 6.0 Version...

    Zudem sammelt der Manifest Compiler die Einträge und komprimiert diese, nicht so bei manuallen Einträgen.



  • Mit dem pragma comment linker hat das nicht funktioniert und auch nicht mit der eine comm(dlg oder so) header datei.Das kann natürlich auch an meinem Code gelegen haben ,aber mit der Manifest version find ich das viel besser,da man kein

    überflüssigen code hat.
    🙂


Log in to reply