コモン コントロールからの通知の受信

コモン コントロールは、ユーザーからの入力などのイベントがコントロールで発生したときに、通知メッセージを親ウィンドウに送信する子ウィンドウです。

アプリケーションは、これらの通知メッセージに基づいて、ユーザーがアプリケーションにどのようなアクションを望んでいるかを判断します。 最も一般的なコントロールは、通知メッセージを 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 を呼び出す必要があります。

Note

CWnd::GetCurrentMessage は、メッセージ ハンドラー内でのみ呼び出す必要があります。

通知メッセージ ハンドラー (この例では NM_RCLICK) の本体に、次のコードを追加します。

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

この時点で、マウス カーソルの位置は cursorPos オブジェクトに格納されます。

関連項目

コントロールの作成方法と使い方
コントロール