Visual c++ 如果选项卡顺序已更改,如何在MFC中检查正确的单选按钮

Visual c++ 如果选项卡顺序已更改,如何在MFC中检查正确的单选按钮,visual-c++,com,mfc,radio-button,activex,Visual C++,Com,Mfc,Radio Button,Activex,我有一个带有一组单选按钮的COM控件,它与一个整数变量相关联,以标识选中的单选按钮 此关联变量是通过DoPropExchange()保存/加载的,因此,必须具有向后兼容性,即旧版本保存的选中单选按钮应能够转移到新版本,即使在新版本中,单选按钮的选项卡顺序已更改 但在我向组中添加了其他单选按钮并更改了选项卡顺序之后,当我尝试加载此控件的旧版本时,没有选中单选按钮!我在调试模式下运行它,发现关联的整数已正确加载 提前谢谢! James如您所述,按钮在正确的组和选项卡顺序下工作良好。然而,在任何时候,

我有一个带有一组单选按钮的COM控件,它与一个整数变量相关联,以标识选中的单选按钮

此关联变量是通过DoPropExchange()保存/加载的,因此,必须具有向后兼容性,即旧版本保存的选中单选按钮应能够转移到新版本,即使在新版本中,单选按钮的选项卡顺序已更改

但在我向组中添加了其他单选按钮并更改了选项卡顺序之后,当我尝试加载此控件的旧版本时,没有选中单选按钮!我在调试模式下运行它,发现关联的整数已正确加载

提前谢谢!
James

如您所述,按钮在正确的组和选项卡顺序下工作良好。然而,在任何时候,每个按钮仍然是一个窗口,适用的是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);

检查中的“单选按钮问题”部分。我不知道它现在是否能帮助您解决向后兼容性问题,但它提供了关于如何以可维护的方式使用单选按钮的非常有价值的提示。这是一篇很好的文章,解释得很好,非常有用!非常感谢,詹姆斯汉克斯,罗曼。但我的问题是处理已经保存的单选按钮索引。从永久存储加载时,无法检查正确的单选按钮。您的方法可以识别实际单击了哪个按钮,但是当对话框初始化时,我需要加载单选按钮的“索引”,并检查正确的按钮,而不必手动选择正确的按钮。干杯,JamesI我想我最好忘记微软的DDX机制。它根本不可维护。谢谢,罗曼。我想我最好按照你的建议手动映射索引。请注意,
SetCheck
的参数不是
bool
,而是一个
int
,可以
BST\u检查
BST\u未检查
BST\u不确定
@MariusBancila:你是对的,即使检查的
BST_
0x01
1
-1
的“真”常数在两种状态按钮的情况下正确设置了相应的位。带有BST_xxx的代码更准确。当然