Vista Stil bei Tree-Controls und List-Controls

Unter Vista wurden die Tree- und List-Controls noch einmal kräftig aufgemöbelt.
Diesen neuen Look kann man auch in seinen Applikationen nutzen und das mit 2 simplen Codezeilen.

#pragma comment(lib,"uxtheme.lib") 
SetWindowTheme(m_myCtrl.GetSafeHwnd(),L"Explorer",NULL);

Und schon hat man die neue Darstellung des Tree-Controls mit den Dreiecken, die Knotenlinien sind weg.
Beim List-Control hat man nun die hellblaue Färbung mit dem Hover-Effekt.

Vorraussetzung dafür ist, dass auch ein Manifest für die Windows Common Controls Version 6 vorliegt. Dem entsprechend ist SetWindowTheme und die Uxtheme.dll erst ab Windows XP verfügbar. Wer das ganze auch kompatibel mit Windows 2000 haben möchte, der verwendet natürlich das dynamische Laden der Uxtheme.dll und sucht den Einsprungpunkt für SetWindowTheme mit GetProcAddress!

Siehe auch MSDN Doku zu SetWindowTheme

2 Gedanken zu „Vista Stil bei Tree-Controls und List-Controls“

  1. > Wer das ganze auch kompatibel mit Windows 2000 haben möchte

    …der verwendet komfortabler „Delay Loading“ für die uxtheme.dll und spart sich somit GetProcAddress() und das Herumhantieren mit Funktionszeigern.
    Damit wird die uxtheme.dll erst geladen, wenn das erste mal eine ihrer Funktionen aufgerufen wird.

    Der einzige Aufwand der ensteht, sind OS-Versionsabfragen um die Aufrufe der uxtheme.dll-Funktionen zu unterbinden, wenn Win2k läuft.

    #pragma comment(lib, „delayimp.lib“)
    #pragma comment(linker, „/delayload:uxtheme.dll“)

  2. Hallo Martin,

    vielen Dank für den Tipp! Sieht wirklich nett aus und funktioniert so einfach 🙂

    Was ich bisher nicht umsetzen konnte ist die Höhe der Einträge im List-Control (Report-Mode) auch entsprechend der Höhe der Einträge im z.B. Windows Explorer darzustellen. Bei mir scheint sich die Höhe an der verwendeten Schriftart zu orientieren wohingegen bei den Einträgen im Windows Explorer noch ein zusätzlicher Abstand vom Fokus-Rahmen bis zum eigentlichen Text gezeichnet wird.

    Hast Du dazu eine Idee?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.