从常见控件接收通知

常见控件是子窗口,当事件(如用户输入)出现在控件中时,将通知消息发送到父窗口。

应用程序依赖于这些通知消息来确定用户希望执行的作。 最常见的控件将通知消息作为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

另请参阅

创建和使用控件
控件