Udostępnij za pośrednictwem


Odbieranie powiadomienia od formantów wspólnych

Typowe kontrolki to okna podrzędne, które wysyłają komunikaty powiadomień do okna nadrzędnego, gdy zdarzenia, takie jak 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ąć. Najczęściej używane kontrolki wysyłają komunikaty powiadomień jako komunikaty WM_NOTIFY. Kontrolki systemu Windows wysyłają większość komunikatów powiadomień jako komunikaty WM_COMMAND. CWnd::OnNotify jest procedurą obsługi komunikatu WM_NOTIFY. Podobnie jak w przypadku CWnd::OnCommand, implementacja wysyłania komunikatu OnNotify powiadomienia do do OnCmdMsg obsługi w mapach komunikatów. Wpis mapy komunikatów na potrzeby obsługi powiadomień jest ON_NOTIFY. Aby uzyskać więcej informacji, zobacz Technical Note 61: ON_NOTIFY and WM_NOTIFY Messages (Uwagi techniczne 61: ON_NOTIFY i komunikaty WM_NOTIFY).

Alternatywnie klasa pochodna może obsługiwać własne komunikaty powiadomień przy użyciu "odbicia komunikatów". Aby uzyskać więcej informacji, zobacz Technical Note 62: Message Emocje ion for Windows Controls (Uwaga techniczna 62: Emocje komunikatów dla kontrolek systemu Windows).

Pobieranie położenia kursora w komunikacie powiadomienia

Czasami warto określić bieżącą pozycję kursora, gdy niektóre komunikaty powiadomień są odbierane przez wspólną kontrolkę. Warto na przykład określić bieżącą lokalizację kursora, gdy wspólna kontrolka odbiera komunikat powiadomienia NM_RCLICK.

Istnieje prosty sposób na osiągnięcie tego celu przez wywołanie metody CWnd::GetCurrentMessage. Jednak ta metoda pobiera tylko położenie kursora w momencie wysłania komunikatu. Ponieważ kursor mógł zostać przeniesiony od momentu wysłania wiadomości, musisz wywołać CWnd::GetCursorPos metodę , aby uzyskać bieżące położenie kursora.

Uwaga

CWnd::GetCurrentMessage program obsługi komunikatów powinien być wywoływany tylko w programie obsługi komunikatów.

Dodaj następujący kod do treści programu obsługi komunikatów powiadomień (w tym przykładzie NM_RCLICK):

CPoint cursorPos;
cursorPos.x = GetCurrentMessage()->pt.x;
cursorPos.y = GetCurrentMessage()->pt.y;

W tym momencie lokalizacja kursora myszy jest przechowywana w cursorPos obiekcie.

Zobacz też

Tworzenie i używanie kontrolek
Kontrolki