我有一个带有单选按钮的对话框,该对话框包含4个按钮组。
DoDataExchange中的DDX_Radio(pDX, D_RADIO_GROUPLEAD, intToStore)
用于保存和加载。
它工作得很好。
选择更改,DoDataExchange调用,存储和加载数据没有问题。
当我隐藏其中一个单选按钮(通过ShowWindow(SW_HIDE)
隐藏它)时,会发生问题。我们仅将其称为第3个按钮以供引用。以前,选择是第3个按钮。
我有逻辑会自动选择默认的一个(在编辑器中将Group标记为true的一个)。我称之为按钮的SetCheck(1)。
视觉上一切似乎都正常。
但是,当我单击第二个按钮,然后尝试调用DoDataExchange(因此称为DDX_Radio)时,它将导致调试断言失败。 (dlgdata.cpp 286行)
和
数据未正确填充回intToStore
中。
为什么会这样,如何避免这个问题?
谢谢。
最佳答案
问题在于,Windows中的自动单选按钮填充会跳过已禁用的按钮。详细。您在按钮3被选中并禁用按钮2点击。按钮2被选中,但按钮3未被选中。
下一个问题发生在DoDataExchange运行时。它不检查按钮是启用还是禁用。 DDX_Radio只是循环遍历所有单选按钮,并且发现组中的2个按钮已启用。这将导致ASSERT。 DDX_Radio不在乎按钮是启用还是禁用。
我的建议:自己使用自定义的OnClick手柄,并手动禁用所有其他按钮。