Windows XP Button styles



  • Mir ist aufgefallen das in Win XP die Buttons optisch anders aussehen als
    die von meinen Programmen.
    Ich habe diese im Win 98 bzw. Win 200o Style.

    Gibt es eine Möglichkeit, die Buttons so darzustellen wie in XP
    Ich hatte hier schon ein Beispiel gefunden:
    http://cboard.cprogramming.com/windows-programming/53322-win32-api-windows-xp-button-styles.html

    Aber wenn ich das Beispiel dort ablaufen lasse gibt es eine linker Fehlermeldung:

    #include <windows.h>
    #include <tchar.h>
    
    #if defined __MINGW_H
    #define _WIN32_IE 0x0400
    #endif
    
    #include <commctrl.h> /*link with comctl32.lib (-lcomctl32 with DevCpp(MinGW))*/
    
    int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                         LPTSTR lpCmdLine,int nCmdShow)
    {
    INITCOMMONCONTROLSEX iccx;
    iccx.dwSize=sizeof(INITCOMMONCONTROLSEX);
    iccx.dwICC=0;
    InitCommonControlsEx(&iccx);
    
    MessageBox(0,
      _T("Don't forget to include your xp manifest\nin the same directory as this exe."),
      _T("XP Manifest Styles"),
      MB_OK);
    return 0;
    }
    

    Ich weiß auch nicht was die Xml Datei darunter bedeutet?
    Oder wie man die einbindet:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
      version="1.0.0.0"
      processorArchitecture="X86"
      name="CompanyName.ProductName.manifest_demo.exe"
      type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="X86"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
    </dependentAssembly>
    </dependency>
    </assembly>
    

    Welchen Compiler benötige ich dafür?
    Reicht der Reicht der VC++ 6 dafür aus?
    Ich habs auch im Vc 2003 laufen lassen, auch mit Fehlermeldung.

    Danke

    Gruß Robbe



  • Das Aussehen von Windows Elementen wird dynamisch von den Bibliotheken des Betriebssystems geladen. Deswegen kann das Fenster eines Programms auf 98, XP und Vista verschieden aussehen.
    Das Einbinden eines Manifests zum Erzwingen des XP Styles macht Sinn, wenn du in einer neueren Windows Version als XP bist. Ein älteres Windows kennt den XP Style noch gar nicht, da hilft der Wunsch des Manifests auch nichts.

    Weitere Erklärungen zum Einbinden findest du beim Weiterverfolgen der verlinkten Diskussion. Sollte diese für dich unverständlich sein, fehlen dir weitere Grundlagen.





  • Das funktioniert natürlich auch unter XP und natürlich auch mit dem VC6. Du musst das Manifest-File lediglich den Ressourcen hinzufügen. Den Typ der Ressource setzt Du auf 24 und gibst dem Ganzen den Identifier 1. Und da Du InitCommonControls bereits aufrufst, war es das schon.

    Ich habs auch im Vc 2003 laufen lassen, auch mit Fehlermeldung.

    Und ich habs auch im Vc 2033 laufen lassen, auch ohne Fehlermeldung. Das ist aber schon länger her...



  • Hallo,

    danke für eure Hilfe.
    @ Yoka Ich verwende Windows XP und Windows 7 im Multiboot
    Ich meinte, das bei meinen Programmierten Programmen, die Buttons so aussehen wie bei Windows 98 und 2000.
    Die Erklärungen zum Einbinden steht zwar Weiterverfolgen der verlinkten Diskussion
    Aber für mich unverständlich erklärt.
    Das einbinden den Manifestes hat nichts mit den Grundkenntnissen der Windows API zu tun.
    Ich bin aber auch kein Experte und deswegen frage ich hier im Forum.

    @c2010 Danke für den Link, da konnte ich wenigstens überprüfen,
    ob der XP Button Style auch bei meinen Visual C++ 6 Compiler funktioniert.
    Und es hat funktioniert
    Hier ist noch ein weiteres Beispiel:
    http://www.codeproject.com/Articles/1357/Add-Windows-XP-Theme-Style-to-your-current-project
    Wenn ich den gesamten Projektdateien heruntergeladen habe, funktionierte auch dieses.

    @Mox Danke für den Tipp aber nach dem Einbinden gabs wieder 2 Fehlermeidungen 😞



  • So jetzt hat es geklappt 🙂

    Es ist ganz wichtig, neben den Manifest-File, auch die comctl32.lib
    in den Ressourcen einzubinden.
    Mox hat schon richtig beschrieben wie man den Manifest-File einbindet.

    Danke
    Gruß Robbe


Log in to reply