Paski stanu (kontrolki systemu Windows)
Pasek stanu to okno poziome w dolnej części okna nadrzędnego, w którym aplikacja może wyświetlać różne rodzaje informacji o stanie. Pasek stanu można podzielić na części, aby wyświetlić więcej niż jeden typ informacji. Poniższy zrzut ekranu przedstawia pasek stanu w aplikacji Microsoft Windows Paint. W takim przypadku pasek stanu zawiera tekst "Aby uzyskać pomoc, kliknij pozycję Tematy pomocy w menu Pomoc". Pasek stanu to obszar w dolnej części okna, który zawiera tekst Pomocy i informacje o współrzędnych.
Ta sekcja zawiera następujące tematy.
- Typy i style
- rozmiaru i wysokości
- Multiple-Part paski stanu
- Operacje tekstowe paska stanu
- Owner-Drawn paski stanu
- paski stanu trybu prostego
- domyślne przetwarzanie komunikatów paska stanu
Typy i style
Domyślna pozycja paska stanu znajduje się u dołu okna nadrzędnego, ale można określić styl CCS_TOP, aby był wyświetlany w górnej części obszaru klienta okna nadrzędnego.
Możesz określić styl SBARS_SIZEGRIP, aby uwzględnić uchwyt rozmiaru na prawym końcu paska stanu.
Nuta
Połączenie stylów CCS_TOP i SBARS_SIZEGRIP nie jest zalecane, ponieważ wynikowy uchwyt rozmiaru nie działa.
Rozmiar i wysokość
Procedura okna paska stanu automatycznie ustawia początkowy rozmiar i położenie okna, ignorując wartości określone w funkcji CreateWindowEx. Szerokość jest taka sama jak w przypadku obszaru klienta okna nadrzędnego. Wysokość jest oparta na metrykach czcionki, która jest obecnie zaznaczona w kontekście urządzenia paska stanu i szerokości obramowań okna.
Procedura okna automatycznie dostosowuje rozmiar paska stanu za każdym razem, gdy otrzyma komunikat WM_SIZE. Zazwyczaj po zmianie rozmiaru okna nadrzędnego element nadrzędny wysyła WM_SIZE komunikat do paska stanu.
Aplikacja może ustawić minimalną wysokość obszaru rysunku paska stanu, wysyłając okno komunikat SB_SETMINHEIGHT, określając minimalną wysokość w pikselach. Obszar rysunku nie zawiera obramowań okna. Minimalna wysokość jest przydatna do rysowania na pasku stanu rysowanym przez właściciela. Aby uzyskać więcej informacji, zobacz Owner-Drawn paski stanu w dalszej części tego rozdziału.
Szerokość obramowania paska stanu jest pobierana przez wysłanie okna komunikatu SB_GETBORDERS. Komunikat zawiera adres tablicy trójelementowej, która odbiera szerokości.
paski stanu Multiple-Part
Pasek stanu może mieć wiele różnych części, z których każdy wyświetla inny wiersz tekstu. Pasek stanu można podzielić na części, wysyłając okno komunikat SB_SETPARTS, określając liczbę części do utworzenia i adres tablicy całkowitej. Tablica zawiera jeden element dla każdej części, a każdy element określa współrzędną klienta prawej krawędzi części.
Pasek stanu może mieć maksymalnie 256 części, chociaż aplikacje zwykle używają znacznie mniej niż. Pobierasz liczbę części na pasku stanu, a także współrzędną prawej krawędzi każdej części, wysyłając w oknie komunikat SB_GETPARTS.
Operacje tekstowe paska stanu
Można ustawić tekst dowolnej części paska stanu, wysyłając komunikat SB_SETTEXT, określając indeks zerowy części, adres ciągu do rysowania w części oraz technikę rysowania ciągu. Technika rysunku określa, czy tekst ma obramowanie i, jeśli tak, styl obramowania. Określa również, czy okno nadrzędne jest odpowiedzialne za rysowanie tekstu. Aby uzyskać więcej informacji, zobacz sekcję Owner-Drawn Paski stanu poniżej.
Domyślnie tekst jest wyrównany do lewej w określonej części paska stanu. Możesz osadzić znaki tabulacji (\ t) w tekście w celu wyśrodkowania lub wyrównania do prawej. Tekst po prawej stronie pojedynczego znaku karty jest wyśrodkowany, a tekst po prawej stronie drugiego znaku karty jest wyrównany do prawej.
Aby pobrać tekst z paska stanu, użyj komunikatów SB_GETTEXTLENGTH i SB_GETTEXT.
Jeśli aplikacja używa paska stanu, który ma tylko jedną część, możesz użyć WM_SETTEXT, WM_GETTEXTi WM_GETTEXTLENGTH komunikatów do wykonywania operacji tekstowych. Te komunikaty dotyczą tylko części, która ma indeks zerowy, co pozwala traktować pasek stanu podobnie jak kontrolka tekstu statycznego.
Aby wyświetlić wiersz stanu bez tworzenia paska stanu, użyj funkcji DrawStatusText. Funkcja używa tych samych technik, aby narysować stan co procedura okna dla paska stanu, ale nie ustawia automatycznie rozmiaru i położenia informacji o stanie. Podczas wywoływania funkcji należy określić rozmiar i położenie informacji o stanie, a także kontekst urządzenia okna, w którym ma zostać narysowy.
paski stanu Owner-Drawn
Poszczególne części paska stanu można zdefiniować jako części rysowane przez właściciela. Użycie tej techniki zapewnia większą kontrolę niż w przeciwnym razie wygląd części okna. Można na przykład wyświetlić mapę bitową, a nie tekst lub narysować tekst przy użyciu innej czcionki.
Aby zdefiniować część okna jako rysowaną przez właściciela, wyślij komunikat SB_SETTEXT do paska stanu, określając część i technikę rysunku SBT_OWNERDRAW. Po określeniu SBT_OWNERDRAW parametr lParam jest 32-bitową wartością zdefiniowaną przez aplikację podczas rysowania części. Można na przykład określić uchwyt czcionki, uchwyt mapy bitowej, adres ciągu itd.
Gdy pasek stanu musi narysować część narysowaną przez właściciela, wysyła komunikat WM_DRAWITEM do okna nadrzędnego. Parametr wParam komunikatu jest identyfikatorem okna podrzędnego paska stanu, a parametr lParam jest adresem struktury DRAWITEMSTRUCT. Okno nadrzędne używa informacji w strukturze do narysowania części. W przypadku części paska stanu narysowanej przez właściciela DRAWITEMSTRUCT zawiera następujące informacje.
Członek | Opis |
---|---|
CtlType | Niezdefiniowany; nie należy używać. |
CtlID | Identyfikator okna podrzędnego paska stanu. |
itemID | Indeks części do narysowania ma być narysowany na podstawie zera. |
itemAction | Niezdefiniowany; nie należy używać. |
itemState | Niezdefiniowany; nie należy używać. |
hwndItem | Dojmij do paska stanu. |
hDC | Dojście do kontekstu urządzenia paska stanu. |
rcItem | Współrzędne części okna do narysowania. Współrzędne są względne względem lewego górnego rogu paska stanu. |
itemData | Zdefiniowana przez aplikację wartość 32-bitowa określona w parametrze lParam komunikatu SB_SETTEXT. |
Paski stanu trybu prostego
Pasek stanu można umieścić w trybie prostym, wysyłając do niego komunikat SB_SIMPLE. Pasek stanu trybu prostego wyświetla tylko jedną część. Po ustawieniu tekstu okna okno zostanie unieważnione, ale nie zostanie ponownie wyrysowane do następnego WM_PAINT. Oczekiwanie na komunikat zmniejsza migotanie ekranu przez zminimalizowanie liczby ponownych rysowania okna. Pasek stanu trybu prostego jest przydatny do wyświetlania tekstu Pomocy dla elementów menu, podczas gdy użytkownik przewija menu.
Ciąg wyświetlany na pasku stanu w trybie prostym jest utrzymywany oddzielnie od wyświetlanych ciągów w trybie innym niż tryb. Oznacza to, że można umieścić okno w trybie prostym, ustawić jego tekst i przełączyć się z powrotem do trybu nieimple bez zmieniania tekstu trybu niesimple.
Podczas ustawiania tekstu paska stanu trybu prostego można określić dowolną technikę rysunku z wyjątkiem SBT_OWNERDRAW. Pasek stanu trybu prostego nie obsługuje rysunku właściciela.
Domyślne przetwarzanie komunikatów paska stanu
W tej sekcji opisano komunikaty obsługiwane przez procedurę okna dla wstępnie zdefiniowanej klasy STATUSCLASSNAME.
Komunikat | Domyślne przetwarzanie |
---|---|
WM_CREATE | Inicjuje pasek stanu. |
WM_DESTROY | Zwalnia zasoby przydzielone dla paska stanu. |
WM_GETFONT | Zwraca uchwyt do bieżącej czcionki, za pomocą której pasek stanu rysuje jego tekst. |
WM_GETTEXT | Kopiuje tekst z pierwszej części paska stanu do buforu. Zwraca wartość 32-bitową, która określa długość tekstu w postaci znaków i technikę używaną do rysowania tekstu. |
WM_GETTEXTLENGTH | Zwraca wartość 32-bitową, która określa długość tekstu w znakach w pierwszej części paska stanu i technikę używaną do rysowania tekstu. |
WM_NCHITTEST | Zwraca wartość HTBOTTOMRIGHT, jeśli kursor myszy znajduje się w uchwytie rozmiaru, co powoduje, że system wyświetli kursor rozmiaru. Jeśli kursor myszy nie znajduje się w uchwytie ustalania rozmiaru, pasek stanu przekazuje ten komunikat do funkcji DefWindowProc. |
WM_PAINT | Maluje nieprawidłowy region paska stanu. Jeśli parametr wParam jest inny niżnull, kontrolka przyjmuje założenie, że wartość jest HDC i maluje przy użyciu tego kontekstu urządzenia. |
WM_SETFONT | Wybiera uchwyt czcionki w kontekście urządzenia dla paska stanu. |
WM_SETTEXT | Kopiuje określony tekst do pierwszej części paska stanu przy użyciu domyślnej operacji rysowania (określonej jako zero). Zwraca wartość TRUE w przypadku powodzenia lub false w przeciwnym razie. |
WM_SIZE | Zmienia rozmiar paska stanu na podstawie bieżącej szerokości obszaru klienta okna nadrzędnego i wysokości bieżącej czcionki paska stanu. |