ボタンに右クリックしたときのハンドラーコードを作るには

解決


紅輝  2008-08-15 17:18:03  No: 68851  IP: 192.*.*.*

ダイアログベースのプログラムに10個ほどボタンを配置しています。
左クリックでそれぞれの処理をしているのですが、それぞれ別の処理もさせたくて、チェックボックスにチェックがある場合と無い場合で10個ほどのボタン処理を違うようにしていますが、このチェックボックスの入り切りが面倒です。
チェックボックスの変わりに、ボタンを右クリックすると別な処理が出来れば好いのですが、よい方法はありませんか?
VisualStudio C++ 2005を使用しています。
なお、WM_RButtonでOnRButtonDown()を使って試しましたが、フォーム上の位置は検出できても、コントロールの上は位置の検出が出来ませんので、方法が分からず困っています。  ダブルチェックのハンドラー関数は用意されていますが、これは使いたくありません。よろしく。

編集 削除
夏みかん  2008-08-15 20:21:20  No: 68852  IP: 192.*.*.*

10個のボタンのプロシージャをすべてサブクラスしましょう。
そして WM_RBUTTONDOWN または WM_RBUTTONUP に別の処理をさせる。
または親プロシージャに WM_APP+αのメッセージを送信して
親プロシージャで処理を分岐するなど。

ちなみにボタンの右クリックでポップアップ・メニューを出す方法をよく利用しています。
メニュー項目を選択すると WM_COMMAND で処理できますので。

編集 削除
紅輝  2008-08-16 14:52:06  No: 68853  IP: 192.*.*.*

夏みかんさん、ご教授有難う御座いますが、如何すれば好いのか、サッパリ判りません。
10個のボタンはそれぞれ、
OnBnClickedButton1(), 〜Button10()まであります。
これを、サブクラスにするには如何すれば好いのでしょうか?
それぞれのボタンを左クリックした時の処理とは違った処理を右クリックしたときに行いたいのです。  無論、Button1〜10を右クリックした時は、それぞれ10通りの違った処理をさせたいのです。  宜しくお願いします。

編集 削除
紅輝  2008-08-17 10:31:53  No: 68854  IP: 192.*.*.*

Staticコントロールを使えば、左ボタンと右ボタンでpoint.xとpoint.yを知ることが出来る事を発見。
ボタンの代わりにStaticコントロールで見事に解決できました。Mny Tnx.

編集 削除