2017-02-02 4 views
1

VS2015 CEのラジオボタンのグループの処理に関して、Visual StudioのMFC-GUIプログラミングテクニックで少し質問が2つあります。MFCラジオボタングループメッセージハンドラ

私は少しダイアログベースのアプリケーションを持っています。このアプリケーションは、指定したペンで私のダイアログ上にいくつかの線を描画します。 ペンの色を変えるためにラジオボタンのグループを作った。グループボックスを作成し、このグループボックスにラジオボタンを配置し、最初のラジオボタンのグループプロパティを有効にして、ラジオボタンがすべて順番に正しくなるようにタブシーケンスをチェックしました。

GUIをテストする私は、異なる色に同時に線を描くことができないため、ラジオボタンの1つだけを計画どおりに選択することができます。今度は、ClassWizardの最初のラジオボタンオブジェクトのBN_CLICKEDメッセージのハンドラを追加して、異なる色のペンの選択を追加しました。

今興味深い部分があります。このハンドラは、最初のラジオボタンをクリックしたときにのみ実行されます。グループプロパティを有効にしたもの。このグループのラジオボタンをクリックするたびに実行する必要があると思いました。私が試した次のことは、これらのラジオボタンのすべてにBN_CLICKEDメッセージハンドラを追加することでしたが、ClassWizardは他のラジオボタンのBN_CLICKEDメッセージを表示しません。

グーグルで回った後、ダイアログのダブルクリックでボタンのBN_CLICKED-Messagehandlerを追加することができる投稿を読んだ。そこで私は自分のラジオボタンをダブルクリックし、最初のラジオボタンのBN_CLICKED-Messagehandlerの呼び出しを追加しました。これは回避策として機能していますので、ラジオボタン(黒、青、赤など)のいずれかをクリックするたびに私のラインが異なる色で描画されるようになりました。

私は2つの質問があります - この動作は意図されていますか?私は最初のラジオボタンのClassWizardにBN_CLICKED-Messagehandlerを追加できるのは、私のグループのラジオボタンのどれかによって呼び出されるという理由だけです。

もう1つの質問は、ハンドラを一度書いて、ボタンのそれぞれに固有のハンドラを作成するのではなく、この特定のハンドラを使用するようにクラスウィザードに指示できることです。それはこのラジオボタンから独立しています。私はこれを、いくつかのボタンのアセンブリで構成されている簡単なアプリケーションでテストしました。クラスウィザードで独自のBN_CLICKEDメッセージハンドラをアタッチすることができます。ウィザードから自動的に生成されたfunctionnameを受け入れず、自分のhandlerfunctionの名前を入力すると、単にそれを上書きすることができないと述べられます。クラスウィザードでオブジェクトメッセージ用の既存のハンドラを選択する方法はありますか、それは不可能で、手動でコード内で手動で行う必要がありますか?

・ホープVS2015 MFCガイは、これは、設計によって確かに..です

+0

ハンドラを手動で追加するだけで正常に動作します。 –

+0

Visual Studio 6とVisual Studio 2010の間にMFCクラスウィザードはありませんでした。これは便利なので、MFCコードを書く必要はありません。 Jeff Prosiseの[Programming Windows with MFC、Second Edition](https://www.amazon.com/dp/1572316950)を読むことをお勧めします。これらのマクロと自動生成コードの背後には何があるかが説明されています。 – IInspectable

答えて

2

を私に伝えることができるそこにあります。あなたがいなくても、BN_CLICKEDのすべてを同じメッセージハンドラに関連付けるだけで、自動的に生成されたものを削除することができます。 ON_CONTROL_RANGE(BN_CLICKED、id1、id2、memberFxn)を使用することもできます。ボタンがresource.hの同じ範囲にあることを確認してください。

+0

ありがとうございます。残念ながら、これはクラスウィザードの機能を構築することで解決できませんでした。しかし、あなたが言及したON_CONTROL_RANGE Makroは、見て分かる価値があるようです。コントロールIDの定義はやや難しいようですが。私はちょうどいくつかの例とMSDNのdefinitionを読んでいます。私はそれを試してみましょう。 – Wciibb