Empfangen von Benachrichtigungen von Standardsteuerelementen

Allgemeine Steuerelemente sind untergeordnete Fenster, die Benachrichtigungen an das übergeordnete Fenster senden, wenn Ereignisse, z. B. Eingaben vom Benutzer, im Steuerelement auftreten.

Die Anwendung basiert auf diesen Benachrichtigungen, um zu bestimmen, welche Aktion der Benutzer ausführen möchte. Die häufigsten Steuerelemente senden Benachrichtigungen als WM_NOTIFY Nachrichten. Windows-Steuerelemente senden die meisten Benachrichtigungen als WM_COMMAND Nachrichten. CWnd::OnNotify ist der Handler für die WM_NOTIFY Nachricht. Wie bei CWnd::OnCommandder Implementierung der OnNotify Benachrichtigung wird die Benachrichtigung OnCmdMsg für die Verarbeitung in Nachrichtenzuordnungen gesendet. Der Nachrichtenzuordnungseintrag für die Behandlung von Benachrichtigungen ist ON_NOTIFY. Weitere Informationen finden Sie unter Technisches Hinweis 61: ON_NOTIFY und WM_NOTIFY Nachrichten.

Alternativ kann eine abgeleitete Klasse ihre eigenen Benachrichtigungen mithilfe von "Nachrichtenspiegelung" verarbeiten. Weitere Informationen finden Sie unter Technical Note 62: Message Reflection for Windows Controls.

Abrufen der Cursorposition in einer Benachrichtigungsnachricht

Gelegentlich ist es nützlich, die aktuelle Position des Cursors zu bestimmen, wenn bestimmte Benachrichtigungen von einem allgemeinen Steuerelement empfangen werden. Beispielsweise wäre es hilfreich, die aktuelle Cursorposition zu bestimmen, wenn ein allgemeines Steuerelement eine NM_RCLICK Benachrichtigung empfängt.

Es gibt eine einfache Möglichkeit, dies durch Aufrufen CWnd::GetCurrentMessagezu erreichen. Diese Methode ruft jedoch nur die Cursorposition zum Zeitpunkt des Sendens der Nachricht ab. Da der Cursor möglicherweise seit dem Senden der Nachricht verschoben wurde, müssen Sie aufrufen CWnd::GetCursorPos , um die aktuelle Cursorposition abzurufen.

Hinweis

CWnd::GetCurrentMessage sollte nur innerhalb eines Nachrichtenhandlers aufgerufen werden.

Fügen Sie den folgenden Code zum Textkörper des Benachrichtigungshandlers hinzu (in diesem Beispiel NM_RCLICK):

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

An diesem Punkt wird die Mauscursorposition im cursorPos Objekt gespeichert.

Siehe auch

Erstellen und Verwenden von Steuerelementen
Steuerelemente