Statusleisten (Windows-Steuerelemente)
Eine Statusleiste ist ein horizontales Fenster am unteren Rand eines übergeordneten Fensters, in dem eine Anwendung verschiedene Arten von Statusinformationen anzeigen kann. Die Statusleiste kann in Teile unterteilt werden, um mehr als einen Informationstyp anzuzeigen. Der folgende Screenshot zeigt die Statusleiste in der Microsoft Windows Paint-Anwendung. In diesem Fall enthält die Statusleiste den Text "Hilfe, klicken Sie im Hilfemenü auf Hilfethemen". Die Statusleiste ist der Bereich am unteren Rand des Fensters, der Hilfetext und Koordinateninformationen enthält.
Dieser Abschnitt enthält die folgenden Themen.
- Typen und Formatvorlagen
- Größe und Höhe
- Multiple-Part Statusleisten
- Statusleistentextvorgänge
- Owner-Drawn Statusleisten
- Statusleisten für den einfachen Modus
- Standardstatusleisten-Nachrichtenverarbeitung
Typen und Formatvorlagen
Die Standardposition einer Statusleiste befindet sich am unteren Rand des übergeordneten Fensters, Sie können jedoch die CCS_TOP Formatvorlage angeben, die oben im Clientbereich des übergeordneten Fensters angezeigt werden soll.
Sie können die SBARS_SIZEGRIP Formatvorlage angeben, um einen Ziehgriff am rechten Ende der Statusleiste einzuschließen.
Anmerkung
Die Kombination der CCS_TOP und SBARS_SIZEGRIP Stile wird nicht empfohlen, da die resultierende Größenanpassung nicht funktionsfähig ist.
Größe und Höhe
Die Fensterprozedur für die Statusleiste legt automatisch die anfängliche Größe und Position des Fensters fest, wobei die in der CreateWindowEx--Funktion angegebenen Werte ignoriert werden. Die Breite entspricht der breite des Clientbereichs des übergeordneten Fensters. Die Höhe basiert auf den Metriken der Schriftart, die derzeit im Gerätekontext der Statusleiste und auf der Breite der Rahmen des Fensters ausgewählt ist.
Die Fensterprozedur passt die Größe der Statusleiste automatisch an, wenn sie eine WM_SIZE Nachricht empfängt. Wenn sich die Größe des übergeordneten Fensters ändert, sendet das übergeordnete Element in der Regel eine WM_SIZE Nachricht an die Statusleiste.
Eine Anwendung kann die Mindesthöhe des Zeichnungsbereichs einer Statusleiste festlegen, indem das Fenster eine SB_SETMINHEIGHT Nachricht gesendet wird, die die Mindesthöhe in Pixel angibt. Der Zeichnungsbereich enthält nicht die Rahmen des Fensters. Eine Mindesthöhe ist nützlich für das Zeichnen in einer statusleiste für besitzergezeichnete Benutzer. Weitere Informationen finden Sie unter Owner-Drawn Statusleisten weiter unten in diesem Kapitel.
Sie rufen die Breite der Rahmen einer Statusleiste ab, indem Sie das Fenster an eine SB_GETBORDERS Nachricht senden. Die Nachricht enthält die Adresse eines Dreielementarrays, das die Breite empfängt.
Multiple-Part Statusleisten
Eine Statusleiste kann viele verschiedene Teile aufweisen, wobei jeweils eine andere Textzeile angezeigt wird. Sie teilen eine Statusleiste in Teile auf, indem Sie das Fenster an eine SB_SETPARTS Nachricht senden und die Anzahl der zu erstellenden Teile und die Adresse eines ganzzahligen Arrays angeben. Das Array enthält ein Element für jeden Teil, und jedes Element gibt die Clientkoordinate des rechten Rands eines Teils an.
Eine Statusleiste kann maximal 256 Teile aufweisen, obwohl Anwendungen in der Regel weit weniger als dies verwenden. Sie rufen die Anzahl der Teile in einer Statusleiste sowie die Koordinate des rechten Rands jedes Teils ab, indem Sie das Fenster an eine SB_GETPARTS Nachricht senden.
Statusleistentextvorgänge
Sie legen den Text eines beliebigen Teils einer Statusleiste fest, indem Sie die SB_SETTEXT Nachricht senden, den nullbasierten Index eines Teils angeben, eine Adresse der Zeichenfolge, die im Teil gezeichnet werden soll, und die Technik zum Zeichnen der Zeichenfolge. Die Zeichnungstechnik bestimmt, ob der Text einen Rahmen hat, und gegebenenfalls die Formatvorlage des Rahmens. Außerdem wird bestimmt, ob das übergeordnete Fenster für das Zeichnen des Texts verantwortlich ist. Weitere Informationen finden Sie im Abschnitt Owner-Drawn Statusleisten weiter unten.
Standardmäßig wird Text innerhalb des angegebenen Teils einer Statusleiste linksbündig ausgerichtet. Sie können Tabstoppzeichen (\ t) in den Text einbetten, um sie zu zentrieren oder rechtsbündig auszurichten. Text rechts neben einem einzelnen Tabstoppzeichen wird zentriert, und Text rechts neben einem zweiten Tabstoppzeichen wird rechtsbündig ausgerichtet.
Um Text aus einer Statusleiste abzurufen, verwenden Sie die SB_GETTEXTLENGTH und SB_GETTEXT Nachrichten.
Wenn Ihre Anwendung eine Statusleiste verwendet, die nur einen Teil enthält, können Sie die WM_SETTEXT, WM_GETTEXTund WM_GETTEXTLENGTH Nachrichten verwenden, um Textvorgänge auszuführen. Diese Nachrichten behandeln nur den Teil mit einem Index von Null, sodass Sie die Statusleiste ähnlich wie ein statisches Textsteuerelement behandeln können.
Wenn Sie eine Statuszeile anzeigen möchten, ohne eine Statusleiste zu erstellen, verwenden Sie die DrawStatusText--Funktion. Die Funktion verwendet dieselben Techniken, um den Status wie die Fensterprozedur für die Statusleiste zu zeichnen, legt jedoch nicht automatisch die Größe und Position der Statusinformationen fest. Beim Aufrufen der Funktion müssen Sie die Größe und Position der Statusinformationen sowie den Gerätekontext des Fensters angeben, in dem sie gezeichnet werden soll.
Owner-Drawn Statusleisten
Sie können einzelne Teile einer Statusleiste definieren, um besitzergezeichnete Teile zu sein. Wenn Sie diese Technik verwenden, erhalten Sie mehr Kontrolle als sonst über die Darstellung des Fensterteils. Sie können z. B. eine Bitmap anstelle von Text anzeigen oder Text mit einer anderen Schriftart zeichnen.
Um einen Fensterteil als vom Besitzer gezeichnet zu definieren, senden Sie die SB_SETTEXT Nachricht an die Statusleiste, und geben Sie den Teil und die SBT_OWNERDRAW Zeichnungstechnik an. Wenn SBT_OWNERDRAW angegeben wird, ist der parameter lParam ein 32-Bit-Anwendungsdefinierter Wert, den die Anwendung beim Zeichnen des Teils verwenden kann. Sie können z. B. ein Schriftarthandle, ein Bitmaphandle, eine Adresse einer Zeichenfolge usw. angeben.
Wenn eine Statusleiste einen vom Besitzer gezeichneten Teil zeichnen muss, sendet sie die WM_DRAWITEM Nachricht an das übergeordnete Fenster. Der wParam--Parameter der Nachricht ist der untergeordnete Fensterbezeichner der Statusleiste, und der lParam Parameter ist die Adresse einer DRAWITEMSTRUCT Struktur. Das übergeordnete Fenster verwendet die Informationen in der Struktur, um den Teil zu zeichnen. Für einen besitzergezeichneten Teil einer Statusleiste enthält DRAWITEMSTRUCT- die folgenden Informationen.
Mitglied | Beschreibung |
---|---|
CtlType- | Undefiniert; nicht verwenden. |
CtlID- | Bezeichner des untergeordneten Fensters der Statusleiste. |
itemID- | Nullbasierter Index des zu zeichnenden Teils. |
itemAction- | Undefiniert; nicht verwenden. |
itemState- | Undefiniert; nicht verwenden. |
hwndItem- | Behandeln sie die Statusleiste. |
hDC- | Behandeln Sie den Gerätekontext der Statusleiste. |
rcItem- | Koordinaten des zu zeichnenden Fensterteils. Die Koordinaten sind relativ zur oberen linken Ecke der Statusleiste. |
itemData- | Anwendungsdefinierter 32-Bit-Wert, der im lParam- Parameter der SB_SETTEXT Nachricht angegeben ist. |
Statusleisten für den einfachen Modus
Sie platzieren eine Statusleiste im "einfachen Modus", indem Sie sie eine SB_SIMPLE Nachricht senden. Eine Statusleiste für den einfachen Modus zeigt nur einen Teil an. Wenn der Text des Fensters festgelegt ist, wird das Fenster ungültig, aber es wird erst nach dem nächsten WM_PAINTneu gezeichnet. Wenn Sie auf die Nachricht warten, wird das Flimmern des Bildschirms reduziert, indem die Anzahl der Neuzeichnungen des Fensters minimiert wird. Eine Statusleiste für einfachen Modus ist nützlich, um Hilfetext für Menüelemente anzuzeigen, während der Benutzer durch das Menü scrollt.
Die Zeichenfolge, die in einer Statusleiste angezeigt wird, während im einfachen Modus getrennt von den Zeichenfolgen verwaltet wird, die im Nichtimplenzmodus angezeigt werden. Dies bedeutet, dass Sie das Fenster im einfachen Modus platzieren, dessen Text festlegen und wieder in den Nichtimplemodus wechseln können, ohne dass der Text im Nichtimplemodus geändert wird.
Wenn Sie den Text einer Statusleiste für einfachen Modus festlegen, können Sie eine beliebige Zeichnungstechnik mit Ausnahme von SBT_OWNERDRAW angeben. Eine Statusleiste für den einfachen Modus unterstützt keine Besitzerzeichnung.
Standardstatusleisten-Nachrichtenverarbeitung
In diesem Abschnitt werden die Nachrichten beschrieben, die von der Fensterprozedur für die vordefinierte STATUSCLASSNAME Klasse behandelt werden.
Nachricht | Standardverarbeitung |
---|---|
WM_CREATE | Initialisiert die Statusleiste. |
WM_DESTROY | Gibt Ressourcen frei, die der Statusleiste zugeordnet sind. |
WM_GETFONT | Gibt den Ziehpunkt an die aktuelle Schriftart zurück, mit der die Statusleiste den Text zeichnet. |
WM_GETTEXT | Kopiert den Text aus dem ersten Teil einer Statusleiste in einen Puffer. Er gibt einen 32-Bit-Wert zurück, der die Länge des Texts in Zeichen und die Zum Zeichnen des Texts verwendete Technik angibt. |
WM_GETTEXTLENGTH | Gibt einen 32-Bit-Wert zurück, der die Länge des Texts im ersten Teil einer Statusleiste und die zum Zeichnen des Texts verwendete Technik in Zeichen angibt. |
WM_NCHITTEST | Gibt den HTBOTTOMRIGHT -Wert zurück, wenn sich der Mauszeiger im Ziehgriff befindet, wodurch das System den Größencursor anzeigt. Wenn sich der Mauszeiger nicht im Ziehgriff befindet, übergibt die Statusleiste diese Meldung an die DefWindowProc--Funktion. |
WM_PAINT | Zeichnet den ungültigen Bereich der Statusleiste. Wenn der wParam--Parameter nichtNULL-ist, geht das Steuerelement davon aus, dass der Wert ein HDC ist und mit diesem Gerätekontext farben wird. |
WM_SETFONT | Wählt den Schriftpunkt im Gerätekontext für die Statusleiste aus. |
WM_SETTEXT | Kopiert den angegebenen Text in den ersten Teil einer Statusleiste unter Verwendung des Standardzeichnungsvorgangs (angegeben als Null). Es gibt TRUE- zurück, wenn dies erfolgreich ist, oder false andernfalls. |
WM_SIZE | Ändert die Größe der Statusleiste basierend auf der aktuellen Breite des Clientbereichs des übergeordneten Fensters und der Höhe der aktuellen Schriftart der Statusleiste. |