1

この COM コントロールにはラジオ ボタンのグループがあり、チェックされたラジオ ボタンを識別する整数変数に関連付けられています。

この関連付けられた変数は DoPropExchange() を介して保存/ロードされるため、下位互換性が必須です。つまり、古いバージョンで保存されたチェック済みのラジオ ボタンは、新しいバージョンではタブがラジオボタンの順番が変わりました。

しかし、ラジオ ボタンをグループに追加してタブ オーダーを変更した後、このコントロールの古いバージョンを読み込もうとしたときに、ラジオ ボタンがチェックされていません。デバッグ モードで実行したところ、関連する整数が正しく読み込まれていることがわかりました。

前もって感謝します!ジェームズ

4

1 に答える 1

3

あなたが言及したように、ボタンは適切なグループとタブ順序でうまく機能します。ただし、各ボタンはいつでもウィンドウであり、BM_SETCHECK適用可能な場合CButton::SetCheckは MFC ラッパーです。

ボタンのチェック状態を個別に更新できます。すべてのラジオ ボタンからの通知を処理BN_CLICKEDし、他のすべてのラジオ ボタンのチェック状態をそれぞれ更新します。

ボタンを正しくチェックするために必要になる可能性のあるもの:

INT m_nIndex;
// ...
// (there a power from above loads nIndex from persistent storage)
// ...
CButton* pButton1 = (CButton*) GetDlgItem(IDC_RADIO1);
CButton* pButton2 = (CButton*) GetDlgItem(IDC_RADIO2);
CButton* pButton3 = (CButton*) GetDlgItem(IDC_RADIO3);
pButton1->SetCheck(m_nIndex == 0);
pButton1->SetCheck(m_nIndex == 1);
pButton1->SetCheck(m_nIndex == 2);
于 2012-08-27T05:18:15.637 に答える