お世話になります。
VC++6.0/WinXP/ダイアログベースで開発しております。
コントロールボタンを、CButtonクラスを用いて
動的に作成しております。
そして、クリックを押された時に、発生するイベントを
1つにしたいのですが、どのボタンが押されたのか
IDを取得する方法が分かりません。
ID毎に、イベントを分けた場合、問題ありませんが
同じイベントを発生させた場合は、押されたボタンIDは
どのように取得出来ますでしょうか。
どうかご教示願います。
※下文のボタンID等は適当にしております。
-----------ボタン作成部-----------------
CButton * clsBtn[5]
int iCnt = 0;
for(int i = 0; i < 5; i++) {
// ボタンの生成
clsBtn[iCnt] = new CButton();
clsBtn[iCnt]->Create("test",....,i + 1000); ←ボタンID
iCnt++;
}
-----------イベント定義部---------------
afx_msg void OnBtnClick_Test();
-----------メッセージマップ部----------
ON_CONTROL(BN_CLICKED, 1000, OnBtnClick_Test)
ON_CONTROL(BN_CLICKED, 1001, OnBtnClick_Test)
ON_CONTROL(BN_CLICKED, 1002, OnBtnClick_Test)
ON_CONTROL(BN_CLICKED, 1003, OnBtnClick_Test)
ON_CONTROL(BN_CLICKED, 1004, OnBtnClick_Test)
-----------実態----------
void CTest::OnBtnClick_Test()
{
ここで、どのボタンが押されたのか分かるには・・・。
}
そういう時は、ON_CONTROL_RANGE を使うと、
引数に ID を受け取れます。
ON_CONTROL_RANGE(BN_CLICKED, 1000, 1004, OnBtnClick_Test)
void CTest::OnBtnClick_Test(UINT id)
{
}
>dairygoods様
回答下さいまして、有難うございます。
ON_CONTROL_RANGE、まさに小生が望んでいたイベントです。
まだヘルプの見方がよく分からず、探し出せませんでした(汗)
しかも、IDさえ気をつければ、メッセージマップが1文で済むのですね。
ボタンが300個もあるシステムの開発をしているので、とても助かります^^;
ご親切に教えて下さいまして、本当に有難うございました。
ツイート | ![]() |