Wie kann ich einen Fortschrittsbalken im Meter-Stil verwenden?

9

In Vista / 7 verwendet das Windows Explorer-Shell-Fenster eine spezielle Art von statischem Fortschrittsbalken, um Speicherplatz auf der Festplatte anzuzeigen.

Bei Standardstilen ist diese Leiste blau und nicht animiert. Es wird auch rot, wenn es fast voll ist (geringer Speicherplatz).

Mit Messaging kann ich dem Windows Forms-ProgressBar-Steuerelement mitteilen, dass es seinen Status in Pausiert und Error (gelb bzw. rot) ändern soll, was zwar funktioniert, aber immer noch spezifisch für den Fortschritt ist.

In den Windows User Experience Guidelines wird speziell auf diese "Meter" -Variante hingewiesen die Fortschrittsanzeige:

  

Dieses Muster ist kein Fortschrittsbalken, aber   Es wird mit dem Fortschritt implementiert   Balkenkontrolle. Meter haben eine deutliche   schau, um sie von der Wahrheit zu unterscheiden   Fortschrittsbalken.

Sie sagen es "wird mit dem Fortschrittsbalken-Steuerelement implementiert", also ... wie? Welche Nachricht könnte ich an die Steuerung senden, damit sie sich so verhält?

Ich habe gesehen, dass Sie Nachrichten zum Einstellen der Leiste senden können Farbe , aber die Dokumentation besagt, dass diese Aufrufe ignoriert werden, wenn visuelle Stile aktiviert sind. Nichts anderes in der Windows-API-Dokumentation für rohe ProgressBar-Steuerelemente scheint eine Möglichkeit zu bieten, dies zu tun. Bin ich gerade dabei, eine benutzerdefinierte gezogene Bar zu machen? Ich würde das OS gerne so oft wie möglich nutzen, damit die Anwendung in den verschiedenen Betriebssystemversionen konsistent erscheint. Mir ist klar, dass Pre-Vista-Versionen dies wahrscheinlich nicht unterstützen werden.

Ich bin auf der Suche nach einer Windows Forms-Lösung, aber ich frage mich, ob überhaupt über die Win32-API verfügbar gemacht wird.

    
Sean Hanley 19.04.2010, 22:29
quelle

1 Antwort

10

Es ist möglich, aber nicht über ProgressBar. Win7 verwendet auch keinen PB, um diese Meter zu zeichnen, es ist kein Fensterhandle mit der Leiste verbunden. Es muss benutzerdefinierte Zeichnung verwenden. Das ist in WinForms auch mit der VisualStyleRenderer-Klasse möglich. Eine Sache, die jedoch nicht hilft, ist, dass die erforderlichen visuellen Stilteile und Zustände nicht deklariert werden, nicht einmal in .NET 4.0.

Dieses Beispielformular reproduziert die Meterleiste:

%Vor%

Ich habe die Teile- und Zustandsnummern aus der vvstyle.h SDK-Headerdatei erhalten.

    
Hans Passant 20.04.2010, 00:50
quelle

Tags und Links