我有这个带有一组单选按钮的 COM 控件,这些单选按钮与一个整数变量相关联,以识别选中的单选按钮。
这个关联的变量是通过 DoPropExchange() 保存/加载的,因此,向后兼容是必须的,即旧版本保存的选中单选按钮应该能够转移到较新版本,即使在较新版本中,选项卡单选按钮的顺序已更改。
但是在我向组中添加了额外的单选按钮并更改了选项卡顺序后,当我尝试加载此控件的旧版本时,没有选中单选按钮!我在调试模式下运行它,发现关联的整数已正确加载。
提前致谢!詹姆士
我有这个带有一组单选按钮的 COM 控件,这些单选按钮与一个整数变量相关联,以识别选中的单选按钮。
这个关联的变量是通过 DoPropExchange() 保存/加载的,因此,向后兼容是必须的,即旧版本保存的选中单选按钮应该能够转移到较新版本,即使在较新版本中,选项卡单选按钮的顺序已更改。
但是在我向组中添加了额外的单选按钮并更改了选项卡顺序后,当我尝试加载此控件的旧版本时,没有选中单选按钮!我在调试模式下运行它,发现关联的整数已正确加载。
提前致谢!詹姆士
正如您所提到的,这些按钮与正确的组和选项卡顺序配合得很好。然而在任何时候每个按钮仍然是一个窗口,BM_SETCHECK
适用的,CButton::SetCheck
是MFC wrapper。
您可以单独更新按钮检查状态,尤其是。处理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);