コモン コントロールからの通知の受信
コモン コントロールは、ユーザーからの入力のようなイベントが、コントロールに発生すると親ウィンドウに通知メッセージを送信する子ウィンドウです。
アプリケーションは、これらの通知メッセージにアクションを行いますが、ユーザーに表示するかを判断するために依存します。ほとんどのコモン コントロールは WM_NOTIFY のメッセージとして通知メッセージを送信します。ウィンドウ コントロールは WM_COMMAND のメッセージとしてほとんどの通知メッセージを送信します。CWnd::OnNotify は WM_NOTIFY のメッセージのハンドラーです。CWnd::OnCommandと同様に、 OnNotify の実装は、メッセージ マップの処理の OnCmdMsg に通知メッセージをディスパッチします。通知を処理するメッセージマップ エントリは ON_NOTIFYです。詳細については、 テクニカル ノート 61: ON_NOTIFY と WM_NOTIFY のメッセージを参照してください。
また、派生クラスは 「メッセージ リフレクションを使用して独自の通知メッセージを処理できます」。詳細については、 テクニカル ノート 62: ウィンドウ コントロールのリフレクション メッセージを参照してください。
通知メッセージのカーソル位置の検索
場合によっては、特定の通知メッセージがコモン コントロールが受信すると、カーソルの現在の位置を特定できると便利です。たとえばコモン コントロールが NM_RCLICK の通知メッセージを受け取ると、現在のカーソル位置を特定できると便利です。
CWnd::GetCurrentMessageを呼び出すことにより実現する簡単な方法があります。ただし、このメソッドは、メッセージが送信された場合のみカーソル位置を取得します。メッセージが送信ため、カーソルが移動する場合があるため、現在のカーソル位置を取得するに CWnd::GetCursorPos をダイヤルします。
[!メモ]
CWnd::GetCurrentMessage は、メッセージ ハンドラー内でのみ呼び出す必要はありません。
通知メッセージ ハンドラーの本体に、次のコードを追加します (この例では NM_RCLICK):
CPoint cursorPos;
cursorPos.x = GetCurrentMessage()->pt.x;
cursorPos.y = GetCurrentMessage()->pt.y;
この時点で、マウス カーソル位置は cursorPos オブジェクトに格納されます。