Informacje o kontrolkach paska śledzenia
Suwak to okno, które zawiera przesuwający się element (czasami nazywany kciukiem) w prowadnicy oraz opcjonalne znaczniki. Gdy użytkownik przesuwa suwak przy użyciu myszy lub kierunkowych, pasek śledzenia wysyła komunikaty powiadomień, aby wskazać zmianę.
- Zakres Zaznaczenia
- komunikaty paska śledzenia
- komunikaty powiadomień paska śledzenia
- domyślne przetwarzanie komunikatów paska śledzenia
- Etykiety narzędzia suwaka
Suwaki są przydatne, gdy chcesz, aby użytkownik wybrał dyskretną nieujemną wartość całkowitą lub zestaw kolejnych nieujemnych wartości całkowitych w określonym zakresie. Na przykład możesz użyć suwaka, aby umożliwić użytkownikowi ustawienie częstotliwości powtarzania klawiatury, przesuwając suwak na dany znacznik. Na poniższej ilustracji przedstawiono typowy pasek suwakowy.
Suwak na pasku śledzenia przesuwa się w przyrostach, które określisz podczas jego tworzenia. Wartości w tym zakresie są określane jako jednostki logiczne. Na przykład, jeśli określisz, że suwak powinien mieć jednostki logiczne w zakresie od 0 do 5, może on zajmować tylko sześć pozycji: pozycję po lewej stronie suwaka i jedną pozycję dla każdego przyrostu w zakresie. Zazwyczaj każda z tych pozycji jest identyfikowana za pomocą znacznika; jednak liczba znaczników jest dowolna i może być mniejsza niż liczba pozycji logicznych.
Pasek śledzenia jest tworzony przy użyciu funkcji CreateWindowEx, określając klasę okna TRACKBAR_CLASS. Po utworzeniu paska śledzenia można użyć komunikatów paska śledzenia, aby ustawić i pobrać wiele jego właściwości. Zmiany, które można wprowadzić, obejmują ustawienie minimalnych i maksymalnych pozycji suwaka, rysowanie znaczników, ustawienie zakresu zaznaczenia oraz przesunięcie suwaka.
Zakres zaznaczenia
Jeśli utworzysz pasek śledzenia ze stylem TBS_ENABLESELRANGE, możesz określić zakres wyboru. Pasek trackbar wyróżnia zakres zaznaczenia i wyświetla trójkątne znaczniki zaznaczenia na początku i na końcu, jak pokazano na poniższej ilustracji.
Zakres wyboru paska trackbar nie wpływa na jego funkcjonalność w żaden sposób. To aplikacja powinna zaimplementować zakres. Można to zrobić w jeden z następujących sposobów:
- Użyj zakresu wyboru, aby umożliwić użytkownikowi ustawienie wartości maksymalnej i minimalnej dla niektórych parametrów. Na przykład użytkownik może przesunąć suwak do pozycji, a następnie kliknąć przycisk z etykietą "Max". Następnie aplikacja ustawia zakres wyboru, aby wyświetlić wartości wybrane przez użytkownika.
- Ogranicz ruch suwaka do wstępnie określonego podzakresu w kontrolce, obsługując powiadomienia WM_HSCROLL lub WM_VSCROLL i nie zezwalając na ruch poza zakresem zaznaczenia. Możesz to zrobić, na przykład, jeśli zakres wartości dostępnych dla użytkownika może ulec zmianie z powodu innych wyborów, które użytkownik dokonał, lub zgodnie z dostępnymi zasobami.
Komunikaty paska śledzenia
Jednostki logiczne paska śledzenia to zestaw ciągłych wartości, które może reprezentować pasek śledzenia. Zazwyczaj są one definiowane przez określenie zakresu możliwych wartości z komunikatem TBM_SETRANGE natychmiast po utworzeniu paska śledzenia. Aplikacje mogą dynamicznie zmieniać zakres przy użyciu TBM_SETRANGE, TBM_SETRANGEMAXlub TBM_SETRANGEMIN.
Aby pobrać położenie suwaka (czyli wartość wybrana przez użytkownika), użyj komunikatu TBM_GETPOS. Aby ustawić położenie suwaka, użyj komunikatu TBM_SETPOS.
Trackbar automatycznie wyświetla znaczniki na początku i na końcu, chyba że ustawisz styl TBS_NOTICKS. (W edytorze zasobów programu Microsoft Visual Studio oznacza to ustawienie właściwości Tick Marks na False). Możesz użyć stylu TBS_AUTOTICKS, aby automatycznie wyświetlać dodatkowe znaczniki zaznaczeń w regularnych odstępach czasu wzdłuż paska śledzenia. Domyślnie suwak TBS_AUTOTICKS wyświetla znacznik w każdym przyroście zakresu suwaka. Aby określić inny interwał dla automatycznych znaczników, wyślij komunikat TBM_SETTICFREQ do suwaka. Na przykład można użyć tej informacji, aby wyświetlić tylko 10 znaczników w zakresie od 1 do 100.
Aby ustawić położenie pojedynczego znacznika, wyślij komunikat TBM_SETTIC. Suwak utrzymuje tablicę wartości DWORD, które przechowują położenie każdego znacznika. Tablica nie zawiera pierwszych i ostatnich znaczników, które są tworzone automatycznie przez pasek śledzenia. Podczas wysyłania komunikatu TBM_GETTIC można określić indeks w tej tablicy w celu pobrania pozycji odpowiedniego znacznika. Alternatywnie możesz wysłać komunikat TBM_GETPTICS, aby pobrać wskaźnik do tablicy. Liczba elementów w tablicy jest równa dwóm mniejszym niż liczba znaczników zwracana przez komunikat TBM_GETNUMTICS. Wynika to z tego, że liczba zwracana przez TBM_GETNUMTICS obejmuje pierwsze i ostatnie znaczniki, których nie ma w tablicy. Aby pobrać fizyczne położenie znacznika, we współrzędnych klienta okna paska śledzenia wyślij komunikat TBM_GETTICPOS. Komunikat TBM_CLEARTICS usuwa wszystkie znaczniki suwaczka oprócz pierwszego i ostatniego.
Rozmiar linii suwaka określa, jak daleko przesuwa się suwak w odpowiedzi na naciśnięcia klawiszy strzałek na klawiaturze, takich jak strzałka w prawo lub strzałka w dół. Aby pobrać lub ustawić rozmiar wiersza, wyślij komunikaty TBM_GETLINESIZE i TBM_SETLINESIZE. Pasek trackbar wysyła również kody powiadomień TB_LINEUP i TB_LINEDOWN do okna nadrzędnego, gdy użytkownik naciska klawisze strzałek.
Rozmiar stron paska przesuwania określa, jak daleko suwak porusza się w odpowiedzi na dane wejściowe z klawiatury, takie jak klawisze "PAGE UP" lub "PAGE DOWN", oraz dane wejściowe z myszy, na przykład kliknięcia w obszarze paska przesuwania. Aby pobrać lub ustawić rozmiar strony, wyślij komunikaty TBM_GETPAGESIZE i TBM_SETPAGESIZE. Suwak wysyła również kody powiadomień TB_PAGEUP i TB_PAGEDOWN do okna nadrzędnego, gdy odbiera wejście z klawiatury lub myszy przewijające stronę. Aby uzyskać więcej informacji, zobacz Komunikaty powiadomień paska śledzenia.
Aplikacja może wysyłać komunikaty w celu pobrania wymiarów paska śledzenia. Komunikat TBM_GETTHUMBRECT pobiera prostokąt graniczny suwaka. Komunikat TBM_GETTHUMBLENGTH pobiera długość suwaka. Komunikat TBM_GETCHANNELRECT pobiera prostokąt graniczny dla kanału suwaka, który jest obszarem, po którym przesuwa się suwak. Zawiera wyróżnienie, gdy wybrany jest zakres. Jeśli suwak ma styl TBS_FIXEDLENGTH, możesz wysłać komunikat TBM_SETTHUMBLENGTH, aby zmienić długość suwaka.
Zakres wyboru można pobrać lub ustawić, wysyłając komunikaty do paska śledzenia. Użyj komunikatu TBM_SETSEL, aby ustawić pozycje początkowe i końcowe zaznaczenia. Aby ustawić tylko pozycję początkową lub tylko pozycję końcową zaznaczenia, wyślij komunikat TBM_SETSELSTART lub TBM_SETSELEND. Aby pobrać pozycje początkowe lub końcowe zakresu wyboru, wyślij komunikat TBM_GETSELSTART lub TBM_GETSELEND. Aby wyczyścić zakres zaznaczenia i przywrócić pasek śledzenia do oryginalnego zakresu, wyślij komunikat TBM_CLEARSEL.
Notatka
Obowiązkiem aplikacji jest zapewnienie, że użytkownik nie może wybrać wartości poza zakresem wyboru. Sama kontrolka nie uniemożliwia użytkownikowi przesuwania suwaka poza zakres.
Komunikaty powiadomień paska śledzenia
Pasek trackbar powiadamia okno nadrzędne o akcjach użytkownika, wysyłając do niego komunikat WM_HSCROLL lub WM_VSCROLL. Pasek trackbar ze stylem TBS_HORZ wysyła komunikaty WM_HSCROLL. Suwak o stylu TBS_VERT wysyła komunikaty WM_VSCROLL. Wyraz o niskiej kolejności parametru wParamWM_HSCROLL lub WM_VSCROLL zawiera kod powiadomienia. W przypadku kodów powiadomień TB_THUMBPOSITION i TB_THUMBTRACK, wyraz o wyższym porządku parametru wParam określa położenie suwaka. W przypadku wszystkich innych kodów powiadomień wyraz o wysokiej kolejności wynosi zero; wyślij komunikat TBM_GETPOS, aby określić położenie suwaka. Parametr lParam jest dojściem do paska trackbar.
System wysyła kody powiadomień TB_BOTTOM, TB_LINEDOWN, TB_LINEUP i TB_TOP tylko wtedy, gdy użytkownik wchodzi w interakcję z paskiem trackbar za pomocą klawiatury. Kody powiadomień TB_THUMBPOSITION i TB_THUMBTRACK są wysyłane tylko wtedy, gdy użytkownik używa myszy. Kody powiadomień TB_ENDTRACK, TB_PAGEDOWN i TB_PAGEUP są wysyłane w obu przypadkach. W poniższej tabeli wymieniono kody powiadomień paska śledzenia oraz zdarzenia (kody kluczy wirtualnych lub zdarzenia myszy), które powodują wysyłanie powiadomieńkodówVirtual-Key.
Kod powiadomienia | Wysłano przyczynę |
---|---|
TB_BOTTOM | VK_END |
TB_ENDTRACK | WM_KEYUP (użytkownik wydał klucz, który wysłał odpowiedni kod klucza wirtualnego) |
TB_LINEDOWN | VK_RIGHT lub VK_DOWN |
TB_LINEUP | VK_LEFT lub VK_UP |
TB_PAGEDOWN | VK_NEXT (użytkownik kliknął kanał poniżej lub z prawej strony suwaka) |
TB_PAGEUP | VK_PRIOR (użytkownik kliknął kanał powyżej lub z lewej strony suwaka) |
TB_THUMBPOSITION | WM_LBUTTONUP po kodzie powiadomienia TB_THUMBTRACK |
TB_THUMBTRACK | Przesuwanie suwaka (użytkownik przeciągnął suwak) |
TB_TOP | VK_HOME |
Domyślne przetwarzanie komunikatów paska śledzenia
W tej sekcji opisano przetwarzanie komunikatów okna wykonywane przez pasek śledzenia.
Komunikat | Przetwarzanie wykonane |
---|---|
WM_CAPTURECHANGED | Wyłącza czasomierz, jeśli został ustawiony podczas przetwarzania WM_LBUTTONDOWN i wysyła kod powiadomienia TB_THUMBPOSITION, jeśli to konieczne. Zawsze wysyła kod powiadomienia TB_ENDTRACK. |
WM_CREATE | Wykonuje dodatkową inicjalizację, taką jak ustawianie rozmiaru wiersza, rozmiaru strony i częstotliwości znaczników na wartości domyślne. |
WM_DESTROY | Zwalnia zasoby. |
WM_ENABLE | Przemaluje okno paska śledzenia. |
WM_ERASEBKGND | Usuwa tło okna, używając aktualnego koloru tła suwaka. |
WM_GETDLGCODE | Zwraca wartość DLGC_WANTARROWS. |
WM_KEYDOWN | Przetwarza klucze kierunkowe i wysyła odpowiednio kody powiadomień TB_TOP, TB_BOTTOM, TB_PAGEUP, TB_PAGEDOWN, TB_LINEUP i TB_LINEDOWN. |
WM_KEYUP | Wysyła kod powiadomienia TB_ENDTRACK, jeśli klawisz był jednym z klawiszy kierunkowych. |
WM_KILLFOCUS | Przemaluje okno paska śledzenia. |
WM_LBUTTONDOWN | Ustawia fokus i przechwytywanie myszy na suwak. W razie potrzeby ustawia czasomierz, który określa, jak szybko suwak przesuwa się w kierunku kursora myszy, gdy użytkownik przytrzymuje przycisk myszy w oknie. |
WM_LBUTTONUP | Zwalnia przechwytywanie myszy i zatrzymuje czasomierz, jeśli został aktywowany podczas przetwarzania WM_LBUTTONDOWN. W razie potrzeby wysyła kod powiadomienia TB_THUMBPOSITION. Zawsze wysyła kod powiadomienia TB_ENDTRACK. |
WM_MOUSEMOVE | Przesuwa suwak i wysyła kod powiadomienia TB_THUMBTRACK podczas śledzenia myszy (zobacz WM_TIMER). |
WM_PAINT | Maluje trackbar. Jeśli parametr wParam jest inny niż NULL, kontrolka z założenia traktuje wartość jako HDC i maluje przy użyciu tego kontekstu urządzenia graficznego. |
WM_SETFOCUS | Przemaluje okno paska śledzenia. |
WM_SIZE | Ustawia wymiary paska śledzenia, usuwając suwak, jeśli nie ma wystarczającego miejsca, aby go wyświetlić. |
WM_TIMER | Pobiera położenie myszy i aktualizuje położenie suwaka. (Jest on odbierany tylko wtedy, gdy użytkownik przeciąga suwak). |
WM_WININICHANGE | Inicjuje wymiary suwaka. |
Etykietki narzędzi paska śledzenia
Pasek trackbar utworzony za pomocą stylu TBS_TOOLTIPS ma domyślną kontrolkę etykietki narzędzia. Etykietka narzędzia pozostaje widoczna i wyświetla bieżącą wartość, gdy użytkownik przeciąga suwak za pomocą myszy.
Nową kontrolkę podpowiedzi można przypisać do suwaka, wysyłając komunikat TBM_SETTOOLTIPS. Aby pobrać uchwyt do przypisanej kontrolki podpowiedzi, użyj komunikatu TBM_GETTOOLTIPS.