Obsługa powiadomień dotyczących dostosowania
Typowa kontrolka paska narzędzi systemu Windows ma wbudowane funkcje dostosowywania, w tym okno dialogowe dostosowywania zdefiniowane przez system, które umożliwia użytkownikowi wstawianie, usuwanie lub zmienianie układu przycisków paska narzędzi. Aplikacja określa, czy funkcje dostosowywania są dostępne i kontroluje zakres, w jakim użytkownik może dostosować pasek narzędzi.
Te funkcje dostosowywania można udostępnić użytkownikowi, nadając pasek narzędzi CCS_ADJUSTABLE stylu. Funkcje dostosowywania umożliwiają użytkownikowi przeciągnięcie przycisku do nowej pozycji lub usunięcie przycisku przez przeciągnięcie go z paska narzędzi. Ponadto użytkownik może kliknąć dwukrotnie pasek narzędzi, aby wyświetlić okno dialogowe Dostosowywanie paska narzędzi , co umożliwia użytkownikowi dodawanie, usuwanie i rozmieszczanie przycisków paska narzędzi. Aplikacja może wyświetlić okno dialogowe przy użyciu funkcji Dostosuj składową.
Kontrolka paska narzędzi wysyła komunikaty powiadomień do okna nadrzędnego w każdym kroku procesu dostosowywania. Jeśli użytkownik trzyma klawisz SHIFT w dół i zaczyna przeciągać przycisk, pasek narzędzi automatycznie obsługuje operację przeciągania. Pasek narzędzi wysyła komunikat powiadomienia TBN_QUERYDELETE do okna nadrzędnego, aby określić, czy przycisk może zostać usunięty. Operacja przeciągania kończy się, jeśli okno nadrzędne zwraca wartość FALSE. W przeciwnym razie pasek narzędzi przechwytuje dane wejściowe myszy i czeka, aż użytkownik zwolni przycisk myszy.
Gdy użytkownik zwolni przycisk myszy, kontrolka paska narzędzi określa lokalizację kursora myszy. Jeśli kursor znajduje się poza paskiem narzędzi, przycisk zostanie usunięty. Jeśli kursor znajduje się na innym przycisku paska narzędzi, pasek narzędzi wysyła komunikat powiadomienia TBN_QUERYINSERT do okna nadrzędnego, aby określić, czy przycisk może zostać wstawiony po lewej stronie danego przycisku. Przycisk jest wstawiany, jeśli okno nadrzędne zwraca wartość TRUE. W przeciwnym razie nie jest. Pasek narzędzi wysyła komunikat powiadomienia TBN_TOOLBARCHANGE , aby zasygnalizować koniec operacji przeciągania.
Jeśli użytkownik rozpocznie operację przeciągania bez przytrzymywania klawisza SHIFT, kontrolka paska narzędzi wysyła komunikat powiadomienia TBN_BEGINDRAG do okna właściciela. Aplikacja, która implementuje własny kod przeciągania przycisku, może użyć tego komunikatu jako sygnału, aby rozpocząć operację przeciągania. Pasek narzędzi wysyła komunikat powiadomienia TBN_ENDDRAG , aby zasygnalizować koniec operacji przeciągania.
Kontrolka paska narzędzi wysyła komunikaty powiadomień, gdy użytkownik dostosowuje pasek narzędzi przy użyciu okna dialogowego Dostosowywanie paska narzędzi . Pasek narzędzi wysyła komunikat powiadomienia TBN_BEGINADJUST po dwukrotnym kliknięciu paska narzędzi przez użytkownika, ale przed utworzeniem okna dialogowego. Następnie pasek narzędzi rozpoczyna wysyłanie serii komunikatów powiadomień TBN_QUERYINSERT w celu określenia, czy pasek narzędzi zezwala na wstawianie przycisków. Gdy okno nadrzędne zwróci wartość TRUE, pasek narzędzi przestanie wysyłać TBN_QUERYINSERT wiadomości powiadomień. Jeśli okno nadrzędne nie zwraca wartości TRUE dla żadnego przycisku, pasek narzędzi niszczy okno dialogowe.
Następnie kontrolka paska narzędzi określa, czy wszystkie przyciski mogą zostać usunięte z paska narzędzi, wysyłając jeden TBN_QUERYDELETE komunikat powiadomienia dla każdego przycisku na pasku narzędzi. Okno nadrzędne zwraca wartość TRUE , aby wskazać, że przycisk może zostać usunięty. W przeciwnym razie zwraca wartość FALSE. Pasek narzędzi dodaje wszystkie przyciski paska narzędzi do okna dialogowego, ale szare, które mogą nie zostać usunięte.
Za każdym razem, gdy kontrolka paska narzędzi potrzebuje informacji o przycisku w oknie dialogowym Dostosowywanie paska narzędzi, wysyła TBN_GETBUTTONINFO komunikat powiadomienia, określając indeks przycisku, dla którego potrzebuje informacji i adresu struktury TBNOTIFY. Okno nadrzędne musi wypełnić strukturę odpowiednimi informacjami.
Okno dialogowe Dostosowywanie paska narzędzi zawiera przycisk Pomoc i przycisk Resetuj. Gdy użytkownik wybierze przycisk Pomoc, kontrolka paska narzędzi wysyła komunikat powiadomienia TBN_CUSTHELP . Okno nadrzędne powinno odpowiedzieć, wyświetlając informacje pomocy. Okno dialogowe wysyła komunikat powiadomienia TBN_RESET , gdy użytkownik wybierze przycisk Resetuj. Ten komunikat sygnalizuje, że pasek narzędzi ma na celu ponowne inicjowanie okna dialogowego.
Te komunikaty są WM_NOTIFY wiadomości i mogą być obsługiwane w oknie właściciela, dodając wpisy mapy komunikatów następującego formularza do mapy komunikatów do mapy komunikatów w oknie właściciela:
ON_NOTIFY( wNotifyCode, idControl, memberFxn )
wNotifyCode
Kod identyfikatora komunikatu powiadomienia, taki jak TBN_BEGINADJUST.
idControl
Identyfikator kontrolki wysyłającej powiadomienie.
memberFxn
Funkcja składowa, która ma być wywoływana po odebraniu tego powiadomienia.
Funkcja składowa zostanie zadeklarowana przy użyciu następującego prototypu:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
Jeśli procedura obsługi komunikatów powiadomień zwraca wartość, powinna umieścić ją w elemecie LRESULT wskazywanym przez wynik.
Dla każdego komunikatu pNotifyStruct
wskazuje strukturę NMHDR lub strukturę TBNOTIFY . Te struktury zostały opisane poniżej:
Struktura NMHDR zawiera następujące elementy członkowskie:
typedef struct tagNMHDR {
HWND hwndFrom; // handle of control sending message
UINT idFrom;// identifier of control sending message
UINT code; // notification code; see below
} NMHDR;
hwndFrom
Obsługa okna kontrolki wysyłającej powiadomienie. Aby przekonwertować ten uchwyt na
CWnd
wskaźnik, użyj CWnd ::FromHandle.idFrom
Identyfikator kontrolki wysyłającej powiadomienie.
kod
Kod powiadomienia. Ten element członkowski może być wartością specyficzną dla typu kontrolki, takiego jak TBN_BEGINADJUST lub TTN_NEEDTEXT, albo może być jedną z typowych wartości powiadomień wymienionych poniżej:
NM_CLICK Użytkownik kliknął lewy przycisk myszy w kontrolce.
NM_DBLCLK Użytkownik dwukrotnie kliknął lewy przycisk myszy w kontrolce.
NM_KILLFOCUS Kontrolka straciła fokus wejściowy.
NM_OUTOFMEMORY Kontrolka nie mogła ukończyć operacji, ponieważ nie ma wystarczającej ilości dostępnej pamięci.
NM_RCLICK Użytkownik kliknął prawy przycisk myszy w kontrolce.
NM_RDBLCLK Użytkownik dwukrotnie kliknął prawym przyciskiem myszy w kontrolce.
NM_RETURN Kontrolka ma fokus wejściowy, a użytkownik nacisnął klawisz ENTER.
NM_SETFOCUS Kontrolka otrzymała fokus wejściowy.
Struktura TBNOTIFY zawiera następujące elementy członkowskie:
typedef struct {
NMHDR hdr; // information common to all WM_NOTIFY messages
int iItem; // index of button associated with notification
TBBUTTON tbButton; // info about button associated withnotification
int cchText; // count of characters in button text
LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
Hdr
Informacje wspólne dla wszystkich komunikatów WM_NOTIFY .
Iitem
Indeks przycisku skojarzonego z powiadomieniem.
tbButton
STRUKTURA TBBUTTON zawierająca informacje o przycisku paska narzędzi skojarzonego z powiadomieniem.
cchText
Liczba znaków w tekście przycisku.
lpszText
Wskaźnik do tekstu przycisku.
Powiadomienia wysyłane przez pasek narzędzi są następujące:
TBN_BEGINADJUST
Wysłane po rozpoczęciu dostosowywania kontrolki paska narzędzi przez użytkownika. Wskaźnik wskazuje strukturę NMHDR zawierającą informacje o powiadomieniu. Procedura obsługi nie musi zwracać żadnej określonej wartości.
TBN_BEGINDRAG
Wysłane, gdy użytkownik zacznie przeciągać przycisk w kontrolce paska narzędzi. Wskaźnik wskazuje strukturę TBNOTIFY . Element członkowski iItem zawiera indeks zerowy przeciąganego przycisku. Procedura obsługi nie musi zwracać żadnej określonej wartości.
TBN_CUSTHELP
Wysłane, gdy użytkownik wybierze przycisk Pomoc w oknie dialogowym Dostosowywanie paska narzędzi. Brak wartości zwracanej. Wskaźnik wskazuje strukturę NMHDR zawierającą informacje o komunikacie powiadomienia. Procedura obsługi nie musi zwracać żadnej określonej wartości.
TBN_ENDADJUST
Wysłane, gdy użytkownik przestanie dostosowywać kontrolkę paska narzędzi. Wskaźnik wskazuje strukturę NMHDR zawierającą informacje o komunikacie powiadomienia. Procedura obsługi nie musi zwracać żadnej określonej wartości.
TBN_ENDDRAG
Wysłane, gdy użytkownik przestanie przeciągać przycisk w kontrolce paska narzędzi. Wskaźnik wskazuje strukturę TBNOTIFY . Element członkowski iItem zawiera indeks zerowy przeciąganego przycisku. Procedura obsługi nie musi zwracać żadnej określonej wartości.
TBN_GETBUTTONINFO
Wysyłane, gdy użytkownik dostosowuje kontrolkę paska narzędzi. Pasek narzędzi używa tego komunikatu powiadomienia do pobierania informacji wymaganych przez okno dialogowe Dostosowywanie paska narzędzi. Wskaźnik wskazuje strukturę TBNOTIFY . Element członkowski iItem określa indeks na podstawie zera przycisku. Elementy członkowskie pszText i cchText określają adres i długość w znakach bieżącego tekstu przycisku. Aplikacja powinna wypełnić strukturę informacjami o przycisku. Zwraca wartość TRUE , jeśli informacje o przycisku zostały skopiowane do struktury lub FALSE w przeciwnym razie.
TBN_QUERYDELETE
Wysłane podczas dostosowywania paska narzędzi przez użytkownika w celu określenia, czy przycisk może zostać usunięty z kontrolki paska narzędzi. Wskaźnik wskazuje strukturę TBNOTIFY . Element członkowski iItem zawiera indeks zerowy przycisku do usunięcia. Zwróć wartość TRUE , aby zezwolić na usunięcie przycisku lub wartość FALSE , aby zapobiec usunięciu przycisku.
TBN_QUERYINSERT
Wysłane, gdy użytkownik dostosowuje kontrolkę paska narzędzi, aby określić, czy przycisk może zostać wstawiony z lewej strony danego przycisku. Wskaźnik wskazuje strukturę TBNOTIFY . Element członkowski iItem zawiera indeks zerowy przycisku do wstawienia. Zwróć wartość TRUE , aby umożliwić wstawienie przycisku przed danym przyciskiem lub false , aby zapobiec wstawieniu przycisku.
TBN_RESET
Wysłane, gdy użytkownik resetuje zawartość okna dialogowego Dostosowywanie paska narzędzi. Wskaźnik wskazuje strukturę NMHDR zawierającą informacje o komunikacie powiadomienia. Procedura obsługi nie musi zwracać żadnej określonej wartości.
TBN_TOOLBARCHANGE
Wysłane po dostosowaniu kontrolki paska narzędzi przez użytkownika. Wskaźnik wskazuje strukturę NMHDR zawierającą informacje o komunikacie powiadomienia. Procedura obsługi nie musi zwracać żadnej określonej wartości.