MFC DDX_RADIO会导致调用dodataexchange(dlgdata.cpp行286)时导致调试断言失败

MFC DDX_Radio causes debug assertion failure when DoDataExchange is called (dlgdata.cpp Line 286)

本文关键字:失败 断言 调试 cpp RADIO DDX 调用 MFC dodataexchange dlgdata      更新时间:2023-10-16

我有一个带有4个按钮组的无线电按钮的对话框。 Dodataexchange中的DDX_Radio(pDX, D_RADIO_GROUPLEAD, intToStore)在那里保存和加载。它可以很好地工作。

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

当我隐藏一个无线电按钮时,就会发生问题(通过 ShowWindow(SW_HIDE)隐藏它。让我们调用它3rd按钮以供参考。以前,选择是此第三按钮。

我的逻辑将自动选择默认一个(一个在编辑器中标记为true的组)。我调用按钮的setCheck(1)。

视觉上一切似乎都在起作用。

但是,当我单击第二个按钮时,请尝试调用dodataexchange(因此ddx_radio),它将导致调试断言失败。(dlgdata.cpp行286)

数据在intToStore中没有正确填充。

为什么这可能是以及如何避免此问题?

谢谢。

问题是,禁用了Windows跳过按钮中的自动广播按钮。详细。选择和禁用按钮3时,请单击按钮2。按钮2被选中,但按钮3未被选中。

当渡视运行时,就会发生下一个问题。它不会检查按钮是启用还是禁用。DDX_RADIO只是在所有无线电按钮上循环,它在组中启用了2个按钮。这导致断言。ddx_radio不在乎启用还是禁用按钮。

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