Komunikaty przycisku
Przycisk może wysyłać komunikaty do okna nadrzędnego, a okno nadrzędne może wysyłać komunikaty do przycisku.
W tej sekcji omówiono następujące tematy.
- wysyłanie komunikatów do przycisków
- obsługa komunikatów z przycisku
- komunikaty powiadomień z przycisków
- przycisków
- przycisk Domyślne przetwarzanie komunikatów
- Tematy pokrewne
Wysyłanie komunikatów do przycisków
Okno nadrzędne może wysyłać komunikaty do przycisku w nakładanym lub podrzędnym oknie przy użyciu funkcji SendMessage lub wysyłać komunikaty do przycisku w oknie dialogowym przy użyciu SendDlgItemMessage, CheckDlgButton, CheckRadioButtoni IsDlgButtonChton.
Aplikacja może użyć komunikatu BM_GETCHECK, aby pobrać stan sprawdzania pola wyboru lub przycisku radiowego. Aplikacja może również użyć komunikatu BM_GETSTATE, aby pobrać bieżące stany przycisku (stan sprawdzania, stan wypychania i stan koncentracji uwagi). Aby uzyskać informacje o określonym stanie, użyj maski bitowej dla zwróconej wartości stanu.
Komunikat BM_SETCHECK ustawia stan wyboru pola wyboru lub przycisku radiowego; komunikat zwraca zero. Komunikat BM_SETSTATE ustawia stan naciśnięcia przycisku; ten komunikat zwraca również zero. Komunikat BM_SETSTYLE zmienia styl przycisku. Jest on przeznaczony do zmieniania stylów przycisków w typie (na przykład zmiana pola wyboru na automatyczne pole wyboru). Nie jest przeznaczony do zmiany między typami (na przykład zmiana pola wyboru na przycisk radiowy). Aplikacja nie powinna zmieniać przycisku z jednego typu na inny.
Przycisk BS_BITMAP lub BS_ICON stylu wyświetla mapę bitową lub ikonę zamiast tekstu. Komunikat BM_SETIMAGE kojarzy uchwyt z mapą bitową lub ikoną za pomocą przycisku. Komunikat BM_GETIMAGE pobiera uchwyt do mapy bitowej lub ikony skojarzonej z przyciskiem.
Aplikacja może również użyć komunikatu DM_GETDEFID, aby pobrać identyfikator domyślnej kontrolki przycisku push w oknie dialogowym. Aplikacja może użyć komunikatu DM_SETDEFID, aby ustawić domyślny przycisk wypychania okna dialogowego.
Wywoływanie funkcji CheckDlgButton lub CheckRadioButton jest równoważne wysyłaniu komunikatu BM_SETCHECK. Wywołanie funkcji IsDlgButtonChecked jest równoważne wysyłaniu komunikatu BM_GETCHECK.
Obsługa komunikatów z przycisku
Powiadomienia z przycisku są wysyłane jako komunikaty WM_COMMAND lub WM_NOTIFY. Informacje o tym, który komunikat jest używany, można znaleźć na stronie referencyjnej dla każdego powiadomienia.
Aby uzyskać więcej informacji na temat obsługi komunikatów, zobacz Control Messages. Zobacz też Komunikaty przycisków.
Komunikaty powiadomień z przycisków
Gdy użytkownik kliknie przycisk, jego stan zmieni się, a przycisk wysyła kody powiadomień w postaci komunikatów WM_COMMAND do okna nadrzędnego. Na przykład kontrolka przycisku wypychanego wysyła kod powiadomienia BN_CLICKED za każdym razem, gdy użytkownik wybierze przycisk. We wszystkich przypadkach (z wyjątkiem BCN_HOTITEMCHANGE) słowo o niskiej kolejności parametru wParam zawiera identyfikator kontrolki, wysokiej kolejności słowo wParam zawiera kod powiadomienia, a parametr lParam zawiera uchwyt okna sterowania.
Zarówno komunikat, jak i odpowiedź okna nadrzędnego zależą od typu, stylu i bieżącego stanu przycisku. Poniżej przedstawiono kody powiadomień przycisków, które aplikacja powinna monitorować i przetwarzać.
Kod powiadomienia | Opis |
---|---|
BCN_HOTITEMCHANGE | Mysz wszedł lub opuścił obszar klienta przycisku. |
BN_CLICKED | Użytkownik kliknął przycisk. |
BN_DBLCLK lub BN_DOUBLECLICKED | Użytkownik dwukrotnie kliknął przycisk. |
BN_DISABLE | Przycisk jest wyłączony. |
BN_PUSHED lub BN_HILITE | Użytkownik wypchnął przycisk. |
BN_KILLFOCUS | Przycisk stracił fokus klawiatury. |
BN_PAINT | Przycisk powinien być malowany. |
BN_SETFOCUS | Przycisk zyskał fokus klawiatury. |
BN_UNPUSHED lub BN_UNHILITE | Przycisk nie jest już wypychany. |
Przycisk wysyła kody powiadomień BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUSi BN_UNPUSHED tylko wtedy, gdy ma styl BS_NOTIFY. kody powiadomień BN_DBLCLK są wysyłane automatycznie dla przycisków BS_USERBUTTON, BS_RADIOBUTTONi BS_OWNERDRAW. Inne typy przycisków wysyłają BN_DBLCLK tylko wtedy, gdy mają styl BS_NOTIFY. Wszystkie przyciski wysyłają kod powiadomień BN_CLICKED niezależnie od stylów przycisków.
W przypadku przycisków automatycznych system zmienia stan wypychania i maluje przycisk. W takim przypadku aplikacja zazwyczaj przetwarza tylko kody powiadomień BN_CLICKED i BN_DBLCLK. W przypadku przycisków, które nie są automatyczne, aplikacja zazwyczaj odpowiada na kod powiadomienia, wysyłając komunikat w celu zmiany stanu przycisku. Aby uzyskać informacje na temat wysyłania komunikatów do przycisków, zobacz Wysyłanie komunikatów do przycisków.
Gdy użytkownik wybierze przycisk właściciela, przycisk wysyła okno nadrzędne WM_DRAWITEM komunikat zawierający identyfikator kontrolki do rysowania oraz informacje o jego wymiarach i stanie.
Komunikaty kolorów przycisku
System udostępnia domyślne wartości kolorów przycisków. Aplikacja może pobrać wartości domyślne dla tych kolorów, wywołując funkcję GetSysColor lub ustawiając wartości przez wywołanie funkcji SetSysColors. W poniższej tabeli przedstawiono domyślne wartości koloru przycisku.
Wartość | Kolor elementu |
---|---|
COLOR_BTNFACE | Twarze przycisków. |
COLOR_BTNHIGHLIGHT | Wyróżnij obszar (górne i lewe krawędzie) przycisku. |
COLOR_BTNSHADOW | Obszar cienia (dolne i prawe krawędzie) przycisku. |
COLOR_BTNTEXT | Zwykły (niegrayowany) tekst w przyciskach. |
COLOR_GRAYTEXT | Wyłączony (szary) tekst w przyciskach. Ten kolor jest ustawiony na wartość 0, jeśli bieżący sterownik wyświetlania nie obsługuje stałego szarego koloru. |
COLOR_WINDOW | Tło okna. |
COLOR_WINDOWFRAME | Ramki okienne. |
COLOR_WINDOWTEXT | Tekst w oknach. |
Jednak wywoływanie SetSysColors wpływa na wszystkie aplikacje, dlatego nie należy wywoływać tej funkcji w celu dostosowania przycisków dla aplikacji.
System wysyła komunikat WM_CTLCOLORBTN do okna nadrzędnego przycisku przed rysowaniem przycisku. Ten komunikat zawiera uchwyt do kontekstu urządzenia przycisku i uchwyt do okna podrzędnego. Okno nadrzędne może użyć tych uchwytów, aby zmienić tekst i kolory tła przycisku. Jednak tylko przyciski narysowane przez właściciela odpowiadają na okno nadrzędne przetwarzają komunikat.
Domyślne przetwarzanie komunikatów przycisku
Procedura okna dla wstępnie zdefiniowanej klasy okna sterowania przycisku wykonuje domyślne przetwarzanie dla wszystkich komunikatów, których procedura sterowania przyciskiem nie przetwarza. Gdy procedura sterowania przycisku zwraca FALSE dla dowolnego komunikatu, wstępnie zdefiniowana procedura okna sprawdza komunikaty i wykonuje domyślne akcje wymienione w poniższej tabeli.
Komunikat | Akcja domyślna | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | Wysyła przycisk WM_LBUTTONDOWN i komunikat WM_LBUTTONUP oraz wysyła w oknie nadrzędnym kod powiadomienia BN_CLICKED. | ||||||||||||||||
BM_GETCHECK | Zwraca stan kontrolny przycisku. | ||||||||||||||||
BM_GETIMAGE | Zwraca uchwyt do mapy bitowej lub ikony skojarzonej z przyciskiem lub null, jeśli przycisk nie ma mapy bitowej lub ikony. | ||||||||||||||||
BM_GETSTATE | Zwraca bieżący stan sprawdzania, stan wypychania i stan koncentracji uwagi przycisku. | ||||||||||||||||
BM_SETCHECK | Ustawia stan sprawdzania dla wszystkich stylów przycisków radiowych i pól wyboru. Jeśli parametr wParam jest większy niż zero dla przycisków radiowych, przycisk otrzymuje styl WS_TABSTOP. | ||||||||||||||||
BM_SETIMAGE | Kojarzy określoną mapę bitową lub uchwyt ikony z przyciskiem i zwraca uchwyt do poprzedniej mapy bitowej lub ikony. | ||||||||||||||||
BM_SETSTATE | Ustawia stan naciśnięcia przycisku. W przypadku przycisków narysowanych przez właściciela komunikat WM_DRAWITEM jest wysyłany do okna nadrzędnego, jeśli stan przycisku uległ zmianie. | ||||||||||||||||
BM_SETSTYLE | Ustawia styl przycisku. Jeśli wyraz o niskiej kolejności parametru lParam jest true, przycisk zostanie ponownie narysowane. | ||||||||||||||||
WM_CHAR | Sprawdza pole wyboru lub automatyczne pole wyboru, gdy użytkownik naciska plus (+) lub równe (=). Czyści pole wyboru lub automatyczne pole wyboru, gdy użytkownik naciska minus (–). | ||||||||||||||||
WM_ENABLE | Maluje przycisk. | ||||||||||||||||
WM_ERASEBKGND | Usuwa tło przycisków narysowanych przez właściciela. Tła innych przycisków są usuwane w ramach przetwarzania WM_PAINT i WM_ENABLE. | ||||||||||||||||
WM_GETDLGCODE | Zwraca wartości wskazujące typ danych wejściowych przetworzonych przez domyślną procedurę przycisku, jak pokazano w poniższej tabeli.
|
||||||||||||||||
WM_GETFONT | Zwraca uchwyt do bieżącej czcionki. | ||||||||||||||||
WM_KEYDOWN | Naciśnięcie przycisku, jeśli użytkownik naciśnie spację. | ||||||||||||||||
WM_KEYUP | Zwalnia przechwytywanie myszy dla wszystkich przypadków z wyjątkiem TAB. | ||||||||||||||||
WM_KILLFOCUS | Usuwa prostokąt fokusu z przycisku. W przypadku przycisków push i domyślnych przycisków naciśnięcia prostokąt fokusu jest unieważniany. Jeśli przycisk ma przechwytywanie myszy, przechwytywanie jest zwalniane, przycisk nie jest klikany, a każdy stan wypychania zostanie usunięty. | ||||||||||||||||
WM_LBUTTONDBLCLK | Wysyła kod powiadomienia BN_DBLCLK do okna nadrzędnego dla przycisków radiowych i przycisków rysowanych przez właściciela. W przypadku innych przycisków dwukrotne kliknięcie jest przetwarzane jako komunikat WM_LBUTTONDOWN. | ||||||||||||||||
WM_LBUTTONDOWN | Wyróżnia przycisk, jeśli pozycja kursora myszy znajduje się w prostokątie klienta przycisku. | ||||||||||||||||
WM_LBUTTONUP | Zwalnia przechwytywanie myszy, jeśli przycisk miał przechwytywanie myszy. | ||||||||||||||||
WM_MOUSEMOVE | Wykonuje tę samą akcję co WM_LBUTTONDOWN, jeśli przycisk ma przechwycenie myszy. W przeciwnym razie nie jest wykonywana żadna akcja. | ||||||||||||||||
WM_NCCREATE | Zmienia dowolny przycisk BS_OWNERDRAW na przycisk BS_PUSHBUTTON. | ||||||||||||||||
WM_NCHITTEST | Zwraca wartość HTTRANSPARENT, jeśli kontrolka przycisku jest polem grupy. | ||||||||||||||||
WM_PAINT | Rysuje przycisk zgodnie z jego stylem i bieżącym stanem. | ||||||||||||||||
WM_SETFOCUS | Rysuje prostokąt fokusu na przycisku uzyskującym fokus. W przypadku przycisków radiowych i przycisków radiowych automatycznych okno nadrzędne jest wysyłane BN_CLICKED kod powiadomienia. | ||||||||||||||||
WM_SETFONT | Ustawia nową czcionkę i opcjonalnie aktualizuje okno. | ||||||||||||||||
WM_SETTEXT | Ustawia tekst przycisku. W przypadku pola grupy komunikat maluje wstępnie istniejącego tekstu przed przemalowaniem pola grupy nowym tekstem. | ||||||||||||||||
WM_SYSKEYUP | Zwalnia przechwytywanie myszy dla wszystkich przypadków z wyjątkiem TAB. |
Wstępnie zdefiniowana procedura okna przekazuje wszystkie inne komunikaty do funkcji DefWindowProc na potrzeby przetwarzania domyślnego.
Tematy pokrewne