Поделиться через


Получение уведомления от стандартных элементов управления

Общие элементы управления — это дочерние окна, которые отправляют сообщения уведомления в родительское окно, когда события, такие как входные данные пользователя, происходят в элементе управления.

Приложение полагается на эти сообщения уведомлений, чтобы определить, какие действия пользователь хочет принять. Большинство распространенных элементов управления отправляют сообщения уведомления в виде WM_NOTIFY сообщений. Элементы управления Windows отправляют большинство сообщений уведомлений в виде WM_COMMAND сообщений. CWnd::OnNotify — это обработчик сообщения WM_NOTIFY. Как и при использовании CWnd::OnCommand, реализация OnNotify отправляет уведомление для OnCmdMsg обработки в картах сообщений. Запись карты сообщений для обработки уведомлений ON_NOTIFY. Дополнительные сведения см . в техническом примечание 61: ON_NOTIFY и WM_NOTIFY сообщения.

Кроме того, производный класс может обрабатывать собственные сообщения уведомлений с помощью "отражения сообщений". Дополнительные сведения см. в техническом примечание 62. Сообщение Рефлексия для элементов управления Windows.

Получение позиции курсора в сообщении уведомления

Иногда полезно определить текущее положение курсора при получении определенных сообщений уведомлений общим элементом управления. Например, было бы полезно определить текущее расположение курсора, когда общий элемент управления получает сообщение NM_RCLICK уведомления.

Существует простой способ сделать это путем вызова CWnd::GetCurrentMessage. Однако этот метод получает только позицию курсора во время отправки сообщения. Так как курсор может быть перемещен с момента отправки сообщения, необходимо вызвать CWnd::GetCursorPos для получения текущей позиции курсора.

Примечание.

CWnd::GetCurrentMessage должен вызываться только в обработчике сообщений.

Добавьте следующий код в текст обработчика сообщений уведомления (в этом примере NM_RCLICK):

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

На этом этапе расположение курсора мыши хранится в объекте cursorPos .

См. также

Создание и использование элементов управления
Controls