MFC类向导的“对象ID”列表里没有手动创建的控件的ID

2024-04-20 11:38

本文主要是介绍MFC类向导的“对象ID”列表里没有手动创建的控件的ID,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

----------------------------------------------------------------------------------------------------------------------------------------

bug天天有,今天的特奇怪!我在给一个对话框手动创建了几个控件后,可以正常运行显示那些控件。似乎一切都正常,但是就在我想通过类向导给“保存按钮”添加事件处理程序时,奇怪的事情发生了:在类向导的“对象ID”列表里居然没有那些手动创建的控件的ID。然而之前的几个功能的对话框里的控件的事件处理程序也是进行类似的操作编写的,没遇到这个问题。下面就来重现一下debug的过程!

----------------------------------------------------------------------------------------------------------------------------------------


问题描述


MFC类向导的“对象ID”列表里没有手动创建的控件的ID。如下图所示


问题分析


遇到该问题我第一反应便是思考是不是操作过程中缺少了什么步骤,仔细回想一下并没有!

自己思考无果之后,变拿出了程序员的利器:各种搜索引擎,Google、百度、360搜素。然而没有一个完全的匹配我的问题的,但可能匹配读者的问题,与时我将个人觉得比较靠谱的链接附在下面,望读者参考:

【为什么我的类向导里没有新添加控件的ID】:      http://bbs.csdn.net/topics/190068916

【VS2010使用MFC类向导时提示“灾难性故障”的解决】:    http://blog.csdn.net/menglongbor/article/details/7609560


虽然上面两个案例跟我的bug不是完全匹配,但是还是给了我一个很大的提示:要确保资源ID唯一性,特别是在修改资源ID的之后可能会有安全隐患!


打开“resource.h”文件后发现,因为之前对话框ID有错别字,我进行过修改,但修改后没有及时删除原先错误的ID,与时出现了两个ID数值相同的宏。而出问题的对话框就是那些控件所属的对话框。如下图所示:



解决方案

删掉错误的宏定义,保留唯一的真确的那个宏。之后再重启一下VS即可!


类向导的“对象ID”列表可以正确显示需要的控件资源ID了。问题解决!



注意:在MFC中资源ID虽然可以随意指定,但不要和现有的资源ID相同,要确保ID的唯一性。有时候你不知道某个ID是不是被占用,你可以用GetDlgItem来测试一下。





这篇关于MFC类向导的“对象ID”列表里没有手动创建的控件的ID的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920164

相关文章

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis