2

MFC を使用して、5 つのラジオ ボタンを持つダイアログを作成しました。他のラジオボタンが選択されたときに通知を受け取りたい。

今のところ、ラジオボタンがクリックされるたびに通知を受け取ります。ただし、ラジオボタンに変更がある場合にのみ、これらの通知を取得する必要があります。

ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)

ありがとう

4

5 に答える 5

4

私があなたの質問を正しく理解していれば、特定のラジオ ボタン ( IDC_RADIO1) のチェック状態がいつ変化するかを知りたがっています。

次に、この状態をメンバー変数としてダイアログ クラスに格納します。 コンストラクターで必要に応じint m_radio1Checked;て 0 または 1 に初期化し、.SetCheckRadioButton()OnInitDialog()

次に、メッセージ マップ内の各ラジオ ボタンのクリックを処理します。

ON_BN_CLICKED(IDC_RADIO1, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO2, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO3, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO4, &CMyDlg::OnRadioButtonClicked)
ON_BN_CLICKED(IDC_RADIO5, &CMyDlg::OnRadioButtonClicked)

そしてハンドラーで変更をチェックします。

void CMyDlg::OnRadioButtonClicked()
{
  int oldState = m_radio1Checked;
  int newState = GetDlgItem(IDC_RADIO1)->GetChecked();
  m_radio1Checked = newState;
  if (oldState != newState)
    // do something ...
}
于 2012-06-05T10:48:53.813 に答える
3

ON_CONTROL_RANGE(BN_CLICKED, firstctrlid, lastcntrlid, memberfx) を使用できます

于 2013-06-17T09:27:40.857 に答える
2

まず、すべてのラジオ ボタンのグループを作成します。ウィザードを使用して、整数型のメンバー変数を追加します。共通ハンドラで UpdateData() を呼び出し、変数の値を確認します。グループ内のボタンの値 (0 ベース) に設定する必要があります。グループ内の最初のボタンを 0 として開始します。ボタンが連続した Z オーダー (タブ オーダー) に設定されていることを確認してください。

于 2012-06-06T23:09:32.380 に答える
1

これを行う最も簡単な方法は、現在のボタン ステータス (bool) をダイアログ クラスのメンバー変数 (ボタンごとに 1 つ) として保存し、OnRadioButtonClicked でステータスが変更されたかどうかを確認することだと思います。

複数の場所でこれを行う必要がある場合は、独自の CButton 派生クラスを作成して、この機能をカプセル化できます。

于 2012-06-05T10:47:03.283 に答える