10

在 Visual Studio 的调试器中运行旧的 MFC 应用程序时,我在“输出”窗口中看到了很多警告,如下所示:

警告:跳过组中的非单选按钮。

我知道在 MFC 中,您将单选按钮分组以指示哪些单选按钮组合在一起。如果我没记错的话,您可以通过将第一个单选按钮的“组”属性设置为 true,然后将其余单选按钮的“组”属性设置为 false 来执行此操作。

关于这个警告,我有三个问题。

  1. 你如何摆脱这个警告?您是否必须将所有非单选按钮控件的“组”属性设置为 true 以避免这种情况,还是应该将其设置为最后一个单选按钮之后的第一个控件?

  2. 有没有一种简单的方法来找出哪些控件或对话框有这个问题?我可以打开每个对话框并摆弄它,直到弹出警告。这个应用程序有很多对话框,所以如果有更简单的方法会很好。

  3. 如果您不修复此警告,可能会发生什么负面行为?换句话说,这还重要吗?

4

5 回答 5

13

在这里的回复和旧论坛的一些研究之间,我想我至少已经弄清楚了如何解决我的问题。这是我对上述问题的发现。

  1. ChrisN 和 Smashery 建议我重新排序选项卡以确保单选按钮按顺序排列,这确实修复了一些警告。

    此外,单选按钮组之后的选项卡顺序中的第一个控件必须设置 WS_GROUP 属性(或在编辑器中将组属性设置为 true)。这告诉 MFC 单选按钮组已经结束。没有它,在下一个 WS_GROUP 之前,所有剩余的选项卡顺序控件都会生成警告。完成这两项操作后,这些对话框中的警告消失了。

  2. 这仍然是一个悬而未决的问题,在不打开每个对话框并等待警告的情况下,我没有找到定位这些问题的好方法。

    如果您知道一个对话框正在创建此警告,但您不知道是什么控件导致它,您可以在生成警告的 TRACE() 调用上的 DDX_Radio() 函数中设置一个断点。这可以更容易地识别被投诉的特定控件。

  3. 我同意 ChrisN 的观点,除了让你仔细检查你的标签顺序之外,我想不出这个警告的任何理由。在网上的其他地方,我找不到任何其他关于这可能导致的问题的参考。

于 2008-09-25T14:39:51.100 回答
7

该警告意味着在组中的第一个和最后一个单选按钮之间的选项卡顺序中除了单选按钮之外还有一些控件。具有WS_GROUP样式集的控件标志着组的开始。

要解决此问题,请使用对话框编辑器更改选项卡顺序并确保所有单选按钮都按顺序编号。另一种方法是在文本编辑器中打开 .rc 文件并更改每个对话框资源中语句的顺序(制表符顺序仅由列出控件的顺序定义)。

如果单选按钮分组工作正常,我认为您可以放心地忽略此警告。

于 2008-09-24T23:23:37.620 回答
1

也许检查您的标签顺序(格式/标签顺序) - 听起来您在一组单选按钮中间有一个普通按钮。如果这确实是问题所在,您可以通过使用“格式/制表顺序”菜单项来解决此问题,然后以正确的顺序单击控件。

于 2008-09-24T23:13:18.333 回答
0

对于第 2 点,这就是为什么我猜你没有回答这个问题,我无法想象比对所有带有单选按钮的对话框进行文本搜索 (*.rc) 更简单的事情。对于每个命中,目视检查此问题的资源代码并更正它。我会在资源文件的源代码中手动完成,而不是尝试与 gui 设计器一起玩。

于 2008-09-27T16:30:05.363 回答
0

对于它的价值,我有 3 个按正确的选项卡顺序排列的单选按钮(在 .rc 文件中确认,之后没有问题)并且仍然收到警告。DDX_Radio 中的断点显示第二个和第三个单选按钮被报告为非单选按钮!查看 resource.h 并发现使用 ID 1313 的第一个单选按钮和使用 1311 和 1312 的其他两个单选按钮。将它们按所需的 tab 顺序并重新编号 ID 以适应和解决问题。猜测 GetWindow GW_HWNDNEXT 以某种方式以 ID 顺序而不是 Tab 顺序链接,即使无线电组工作。注意:仍然使用 Visual C++ v6

于 2018-07-13T00:43:25.397 回答