ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MFC 具有该ID的控件已存在 ID

2021-11-02 10:57:59  阅读:181  来源: 互联网

标签:控件 MFC 对话框 APS VALUE NEXT ID


MFC 具有该ID的控价已存在
在这里插入图片描述
给每个窗口 编制一个序号: IDC_D4_BUT_SAVE , D4 表示第4个对话框

ID号的值可以重复,ID的名字貌似不能重复

两个不同对话框里的按钮 ID号确实可以相同,但是因为父窗口不同,所以互不影响。
发送消息时候是通过句柄发送的,这个两个按钮的ID号看起来一样,但是实际的句柄并不一样,所以不影响使用。
Windows内部 最关键是句柄。

不同父窗口的子窗口ID是可以重复的……其实就算是同一个父窗口,子窗口ID也是可以重复的,只要你没有啥和ID相关的逻辑,比如IDC_STATIC就是。如果你在同一个对话框上有两个按钮有相同的ID,而且CDialog::GetDefID返回的是这个ID,那么按回车可能不会触发你期望的那个按钮

1

ID的分配是通过头文件控制的。
你看你的resource.h的最后几行(注释是我加的,源文件里没有):

#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        2000  // 下一个资源的ID,比如字符串资源,位图资源等
#define _APS_NEXT_COMMAND_VALUE         40001 // 下一个command的ID,这个一般是作为WM_COMMAND消息的参数用的。
#define _APS_NEXT_CONTROL_VALUE         1001  // 下一个控件的ID
#define _APS_NEXT_SYMED_VALUE           101 // 下一个符号的ID
#endif

比如,如果这个时候你用VC的对话框插入一个字符串,那么这个字符串的ID就会自动被分配成2000,同时_APS_NEXT_RESOURCE_VALUE会被改成2001。其他几个值也是以类似方式工作的。

所以其实VC自动分配的ID号,跟你自己定义的是有可能重复的。你必须自己保证没有重复,而不是依赖于VC帮你检查。一个办法是,比如你要新加一个控件,你可以用_APS_NEXT_CONTROL_VALUE的值作为这个控件的ID,然后自己手动把_APS_NEXT_CONTROL_VALUE的值加1,这样就能保持跟VC的ID分配机制一致。

2

MFC中的ID命名规则 .

IDC_:控件的ID命名前缀(Control);

IDM_:菜单的ID命名前缀(Menu);

IDD_:对话框的ID命名前缀(Dialog);

IDR_:资源的ID命名前缀(Resource);

IDS_:字符串的ID命名前缀(String);

IDB_:位图资源的ID命名前缀(Bitmap);

3

如果不操作数据,可以是一个ID,如果要操作数据就不行了,因为没法判断是哪个控件做的动作,除非所有相同的ID的控件都执行同样的动作
一般情况,同进程中不要用相同的ID,当然,你故意要弄成相同,如果不需要区分的话(比如STATIC控件,默认都是一个ID),应该也没什么问题…

没有消息处理的空间就可以设置成一样的名字,例如IDC_STATIC…

同一个工程的窗口、控件、动态创建对象等都有唯一ID。这正是区分或者查找他们的唯一方式。
不可能重复,如果重复的话,编译有可能通过,但是运行的时候,如果牵涉ID查询,那么会出错。 你可以打开当前工程下的 resource.h文件,里面有所有的ID的定义。所有的ID都定义在此,每添加一个控件对象,系统会根据已经添加的ID 来创建一个新的ID,一般情况下是最高的ID号加1成为一个新的ID号!

标签:控件,MFC,对话框,APS,VALUE,NEXT,ID
来源: https://blog.csdn.net/wowocpp/article/details/121095436

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有