从公共控件接收通知

公共控件是一系列子窗口,当控件中发生事件(如来自用户的输入)时,它们会将通知消息发送到父窗口。

应用程序依靠这些通知消息来确定用户希望它执行的操作。 大多数公共控件将通知消息作为 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 对象中。

另请参阅

创建和使用控件
控件