ボタンがクリックされた時のイベントを同じにした場合、押されたボタンのIDを知るには?

解決


いな  2006-06-24 03:25:00  No: 62308

お世話になります。
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()
{
  ここで、どのボタンが押されたのか分かるには・・・。
}


dairygoods  2006-06-24 04:09:46  No: 62309

そういう時は、ON_CONTROL_RANGE を使うと、
引数に ID を受け取れます。

ON_CONTROL_RANGE(BN_CLICKED, 1000, 1004, OnBtnClick_Test)

void CTest::OnBtnClick_Test(UINT id)
{
}


いな  2006-06-26 06:20:34  No: 62310

>dairygoods様

回答下さいまして、有難うございます。
ON_CONTROL_RANGE、まさに小生が望んでいたイベントです。
まだヘルプの見方がよく分からず、探し出せませんでした(汗)
しかも、IDさえ気をつければ、メッセージマップが1文で済むのですね。
ボタンが300個もあるシステムの開発をしているので、とても助かります^^;
ご親切に教えて下さいまして、本当に有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加