我有一个带有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
中正确填充。
为什么会这样,我怎么能避免这个问题?
谢谢。
答案 0 :(得分:1)
问题是,Windows中的自动单选按钮会跳过禁用的按钮。详细地。单击按钮2,同时选择并禁用按钮3。按钮2被选中但按钮3未被取消选中。
DoDataExchange运行时会出现下一个问题。它不会检查按钮是启用还是禁用。 DDX_Radio只是遍历所有单选按钮,它会发现组中的2个按钮已启用。这会导致ASSERT。 DDX_Radio不关心是否启用了按钮。
我的建议:自己使用自定义OnClick句柄,并手动禁用所有其他按钮。