1

我有一个带有单选按钮的对话框,其中包含 4 个按钮组。 DDX_Radio(pDX, D_RADIO_GROUPLEAD, intToStore)在 DoDataExchange 中用于保存和加载。它工作得很好。

选择更改,调用 DoDataExchange,存储和加载数据没有问题。

当我隐藏一个单选按钮时出现问题(通过隐藏它ShowWindow(SW_HIDE)。让我们称之为第三个按钮以供参考。以前,选择是第三个按钮。

我的逻辑会自动选择默认值(在编辑器中将 Group 标记为 true)。我调用按钮的 SetCheck(1)。

从视觉上看,一切似乎都在工作。

但是,当我单击第二个按钮,然后尝试调用 DoDataExchange(因此是 DDX_Radio)时,它会导致调试断言失败。(dlgdata.cpp 第 286 行)

数据未正确填充回intToStore.

为什么会这样,我该如何避免这个问题?

谢谢你。

4

1 回答 1

1

问题是,Windows 中的自动单选按钮会跳过禁用的按钮。详细地。在选择并禁用按钮 3 时单击按钮 2。按钮 2 被选中,但按钮 3 未被选中。

DoDataExchange 运行时会出现下一个问题。它不检查按钮是启用还是禁用。DDX_Radio 只是遍历所有单选按钮,它发现组中的 2 个按钮已启用。这会导致 ASSERT。DDX_Radio 不关心按钮是启用还是禁用。

我的建议:自己使用自定义 OnClick 句柄,并手动禁用所有其他按钮。

于 2017-03-11T14:14:25.507 回答