一般的なコントロールは、ユーザーからの入力などのイベントがコントロールで発生したときに親ウィンドウに通知メッセージを送信する子ウィンドウです。
アプリケーションは、これらの通知メッセージに基づいて、ユーザーがアプリケーションにどのようなアクションを望んでいるかを判断します。 最も一般的なコントロールは、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
オブジェクトに格納されます。