2012-03-19 11 views
0

CDialogBarからサブクラス化されたコントロールがあり、ツールバーのようなボタンがいくつかあります。 CDialogBarクラスでWM_LBUTTONDOWNを捕捉すると、コントロール上にあるボタンの1つがマウスでクリックされたかどうかを簡単に知ることができます。CDialogBarでマウスがクリックされた場所を確認します。

答えて

1

CDialogBar通常、クラスは通常のウィンドウコントロールをホストしているため、ボタンをクリックするとダイアログウィンドウクラスではなく、このコントロールウィンドウにメッセージが送信されます。WM_LBUTTONDOWNだからもしあなたがそれらのメッセージを(実際には)傍受したいなら、ウィンドウをサブクラス化してメッセージを処理するか、メッセージフックをインストールする必要があります。

Spy++ツールを使用して、どのメッセージが実際にあなたのCDialogBarウィンドウに届いているかを確認して、それらを処理することが挑戦の解決策であるかどうかを確認することもできます。

+0

はい、私はWM_LBUTTONDOWNをキャッチしますが、私はWM_LBUTTONDOWNをキャッチしますが、ユーザーがコントロール上にあるボタンをクリックすると、別の動作が必要になります – Hate

+0

コントロールをサブクラス化(クリアするにはダイアログバー自体なし) 'WndProc'にメッセージを受け取ったときの動作を確実に上書きすることができ、メッセージを転送するか、自分で処理することができます。ここでは、ボタンがダイアログバーによってホストされていることはあまり重要ではありません。重要なことは、メッセージ処理をインターセプトすることをサブクラス化することです。 –

+0

はい、私はできると私は知っています。あなたは質問を理解していない、それは私の悪い英語のためです:(私はWM_LBUTTONDOWNイベントをキャッチし、それを処理します。私はPreTranslateMessageをオーバーライドしました。質問は、ユーザーがコントロール内のボタンの1つをクリックした場合、 、または単にコントロールの表面に。実際に私はボタンをクリックした場合、このメッセージをCDialogBar :: PreTranslateMessageに転送したいと思います。 surface – Hate

関連する問題