Visual c++ GetCheckedRadioButton在我的mfc应用程序中工作错误

Visual c++ GetCheckedRadioButton在我的mfc应用程序中工作错误,visual-c++,mfc,Visual C++,Mfc,我在mfc应用程序中使用了一些单选按钮。我还使用GetCheckedRadioButton来获取选中单选按钮。请参阅以下代码: 如果我使用Alt+E+i签入我的资源,它将显示我的IDD_RAD1为1041,IDD_RAD11为20681。如果我选中单选按钮,则IDD_RAD1的id值正确为1041,而IDD_RAD11的id值错误为20115。我不知道为什么它得到第二个单选按钮id错误。指导我 不要使用这个愚蠢的函数。GetCheckedRadioButton仅在ID连续时有效。正如你所写的,它

我在mfc应用程序中使用了一些单选按钮。我还使用GetCheckedRadioButton来获取选中单选按钮。请参阅以下代码:

如果我使用Alt+E+i签入我的资源,它将显示我的IDD_RAD1为1041,IDD_RAD11为20681。如果我选中单选按钮,则IDD_RAD1的id值正确为1041,而IDD_RAD11的id值错误为20115。我不知道为什么它得到第二个单选按钮id错误。指导我


不要使用这个愚蠢的函数。GetCheckedRadioButton仅在ID连续时有效。正如你所写的,它们不是

文件是错误的。它不会一组检查收音机


最好使用CWnd::GetNextDlgGroupItem项,并在每个项上使用IsDlgButtonched。

编辑
资源.h
文件,并使ID连续,如中所示

#define IDD_RAD1  1041
#define IDD_RAD11 1042

确保同一对话框中的所有ID都是唯一的。

不会神奇地分配资源ID值。您负责分配它们,因为只有您知道UI的语义。如果你让资源编辑器分配随机值,不要抱怨它没有注意到你额外的语义约束。我不同意那个家伙,他否决了这个问题。这里的问题是糟糕和错误的文档。该函数的名称听起来可能会做得很好。但事实并非如此。MFC依赖于开发人员了解Windows API这一事实。它不会复制每一条信息。特别是,它不会重复控件分组的工作方式。什么时候GetCheckedRadioButton是Windows API函数?您如何从这个名称知道ID必须是连续的?我需要知道什么Windows API函数?检查无线电按钮?特别是当DDX函数仅仅依赖于WS_组时……我永远不想依赖于基于连续想法的代码。下一个程序员可能只是添加一个控件,而不知道是否需要按连续顺序添加ID。。。我试图通过使用更好的函数来避免这种情况,或者通过使用将ID映射到所需序列的内部静态数组来避免这种情况。就我的2美分!ID不是想法:(,很抱歉我的英语不好。@xMRi注释是一个非常有用的工具,更重要的是
C_-ASSERT
/
static_-ASSERT
。您建议的使用静态数组的解决方法也会遇到同样的问题-它不能解决任何问题。并且引入了一种新的错误可能性:无法确保唯一ID。问题不是唯一ID问题在于让ID按连续顺序排列。引入一个ID数组我消除了更改ID或更改ID序列会破坏代码的问题。我看不出它会引入新的错误源…是的,使用静态断言并检查ID是否连续将有所帮助。只需我的两分钱。你错了理解我所做的。ID仍然在资源中。h。但是序列是在UINT[]中定义的,当我需要序列时…我从不以连续顺序传递ID。我认为我们可以停止讨论。我们都有自己的观点。
#define IDD_RAD1  1041
#define IDD_RAD11 1042