Komunikaty sterujące
Ta sekcja zawiera informacje o tym, jak komunikaty systemu Windows są używane do komunikowania się z kontrolkami.
Omówiono następujące tematy.
Komunikaty do typowych kontrolek
Ponieważ typowe kontrolki to okna, aplikacja może komunikować się z nimi przy użyciu typowych komunikatów platformy Microsoft Win32, takich jak WM_GETFONT lub WM_SETTEXT. Ponadto klasa okien każdej wspólnej kontrolki obsługuje zestaw komunikatów specyficznych dla kontrolek. Zazwyczaj aplikacja używa SendMessage lub SendDlgItemMessage do przekazywania komunikatów do kontrolki (często odbiera informacje w wartości zwracanej).
Niektóre typowe kontrolki mają również zestaw makr, których aplikacja może używać zamiast SendMessage. Makra są zwykle łatwiejsze w użyciu niż funkcje. Poniższy przykładowy kod pobiera tekst wybranego elementu widoku drzewa, najpierw przy użyciu nieprzetworzonych komunikatów, a drugi przy użyciu równoważnych makr. Załóżmy, że jest uchwytem okna sterowania.
BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;
// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);
// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);
Po wprowadzeniu zmiany ustawień kolorów systemu system Windows wysyła komunikat WM_SYSCOLORCHANGE do wszystkich okien najwyższego poziomu. Okno najwyższego poziomu musi przekazać komunikat WM_SYSCOLORCHANGE do wspólnych kontrolek; w przeciwnym razie kontrolki nie zostaną powiadomione o zmianie koloru. Przekazywanie komunikatu gwarantuje, że kolory używane przez wspólne kontrolki są zgodne z kolorami używanymi przez inne obiekty interfejsu użytkownika. Na przykład kontrolka paska narzędzi używa koloru "Obiekty 3-W" do rysowania przycisków. Jeśli użytkownik zmieni kolor obiektu 3-W, ale komunikat WM_SYSCOLORCHANGE nie zostanie przekazany do paska narzędzi, przyciski paska narzędzi pozostaną w oryginalnym kolorze (a nawet zmienią się na kombinację starych i nowych kolorów), gdy kolor innych przycisków w systemie ulegnie zmianie.
Powiadomienia z kontrolek
Kontrolki to okna podrzędne, które wysyłają komunikaty powiadomień do okna nadrzędnego, gdy zdarzenia, zwykle wyzwalane przez dane wejściowe od użytkownika, występują w kontrolce. Aplikacja korzysta z tych komunikatów powiadomień, aby określić, jaką akcję użytkownik chce podjąć. Z wyjątkiem pasków śledzenia, które używają komunikatów WM_HSCROLL i WM_VSCROLL w celu powiadamiania ich o zmianach, typowe kontrolki wysyłają powiadomienia jako WM_COMMAND lub WM_NOTIFY wiadomości, jak określono w temacie referencyjnym dla powiadomienia. Zazwyczaj starsze powiadomienia (te, które były w interfejsie API przez długi czas) używają WM_COMMAND.
Parametr WM_NOTIFY lParam jest adresem NMHDR lub adresem większej struktury obejmującej NMHDR jako pierwszy element członkowski. Struktura zawiera kod powiadomienia i identyfikuje wspólną kontrolkę, która wysłała komunikat powiadomienia. Znaczenie pozostałych składowych struktury, jeśli istnieje, różni się w zależności od kodu powiadomienia.
Każdy typ wspólnej kontrolki ma odpowiedni zestaw kodów powiadomień. Wspólna biblioteka kontrolek udostępnia również kody powiadomień, które mogą być wysyłane przez więcej niż jeden typ wspólnej kontrolki. Zapoznaj się z dokumentacją dotyczącą kontroli zainteresowań, aby określić, które kody powiadomień będą wysyłane i jaki format przyjmują.
Na przykład kod pokazujący sposób obsługi komunikatów WM_NOTIFY można znaleźć w temacie referencyjnym dla tego komunikatu.
Tematy pokrewne