VS2019 MFC类向导无法删除控件关联的成员变量问题求助
VS2019 C++ MFC 类向导控件变量异常绑定修复方案
核心原因
MFC类向导的控件-变量绑定映射除了存放在类的头/源文件中,还会缓存到VS项目缓存文件、.rc资源的AFX_DATA_MAP区块中,类向导的异常报错会导致缓存无法自动更新,所以仅通过类向导操作无法解除绑定。
手动修复步骤
- 第一步:清理VS缓存
关闭所有VS窗口,进入项目根目录,删除.vs隐藏文件夹、后缀为.suo的隐藏文件,以及Debug/Release、x86/x64等编译输出目录 - 第二步:清理类中的绑定代码
打开属性页类对应的头文件,删除所有待解绑变量的重复/自动生成的声明;再打开对应的源文件,找到DoDataExchange函数,删除所有该变量和对应控件ID的绑定代码行(如DDX_Control(pDX, IDC_YOUR_EDIT_ID, m_yourCustomVar);格式的代码) - 第三步:清理资源文件的冗余映射
右键点击项目中的.rc资源文件,选择「查看代码」打开,搜索对应属性页类的AFX_DATA_MAP区块,删除其中对应控件ID和变量的绑定条目 - 第四步:手动添加自定义变量
直接在头文件中编写你的自定义类型成员变量声明,不要使用类向导的添加功能,确认DoDataExchange函数中没有将该变量和任何控件绑定的代码 - 第五步:重新生成项目
打开VS加载项目,执行「重新生成解决方案」操作,再打开类向导查看,变量和控件的绑定关系已经解除
附带说明
你遇到的「索引和长度必须引用字符串内的位置」是VS2019类向导的已知bug,由类向导解析AFX_DATA_MAP区块时的字符串索引越界导致,清理完上述冗余映射后报错会自动消失。
内容的提问来源于stack exchange,提问作者Gregg H
相关产品推荐
相关产品推荐

