写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
发布日期:2021-06-30 18:20:48 浏览次数:3 分类:技术文章

本文共 1770 字,大约阅读时间需要 5 分钟。

一般MFC开发的时候,如果有些资源是从其他工程中移植到本工程的,而在资源移植的时候都要将对应的资源ID复制到本工程的resource.h文件中。此时不管你在不在本工程中添加资源ID,resource.h文件中的ID可能都有重复的,一般再添加资源ID后,肯定有重复的。此外,随着界面越来越多,各种控件对话框的ID都堆积在一起,令人看得闹心。

今天我自己整理了一个小工具,可以打开Resource.h文件进行转换,即可解决此问题。重新排序并去重复ID。

1、使用说明

(1)本程序将MFC资源文件Resource.h中的ID重新整理和排序;按照字母顺序排序,拒绝重复ID;

(2)怕引发意外问题,程序不会改动原MFC的默认资源序号,例如:

#define IDR_MAINFRAME 128

维持现状不变

(3)要求resource.h文件的编码必须是Windows系统默认的ANSI,否则会出现乱码;

(4)MFC工程如果使用了ribbon工具栏,需要手动把res文件夹下的ribbon.mfcribbon-ms文件删除重建,否则MFC工程启动会报错;因为ribbon文件里的ID已经重新排序了,ID错位会导致消息映射混乱。

如何删除重建ribbon.mfcribbon-ms?

先进入VS资源视图->*.rc->Ribbon->IDR_RIBBON,双击打开ribbon工具栏;

然后再去res路径删除ribbon.mfcribbon-ms文件;(注意删除之前一定先完成第1步,在资源视图打开ribbon工具栏,否则ribbon.mfcribbon-ms文件删除之后就再也打不开工具栏了)

回到ribbon工具栏,随便修改里面的一个菜单文本或图标,然后点击保存,就会自动重新生成ribbon.mfcribbon-ms文件。

(5)另外,请注意一点:文本打开res\*.rc文件,跳转到Icon栏目,微软官方有说法:

// Icon with lowest ID value placed first to ensure application icon

// remains consistent on all systems.

就是说,目标文件exe使用的图标,优先考虑ID值最小的图标文件。

所以你需要确认IDR_MAINFRAME的数值是否比其他ico文件的id小。

(6)谨慎起见,建议转换前备份Resource.h和ribbon.mfcribbon-ms文件

 

2、完整的源码和可执行文件请下载:

 

 

---引申阅读,我从网上搜索的教程得知的---

一、MFC如何删除未使用的资源符号?

1:打开资源视图(ctrl+shift+e,或者从视图选项中打开,或者双击资源文件夹中的 .rc 文件)

2:右击资源视图中的 .rc 文件夹,打开 ID= 资源符号 项 
3:在弹出的对话框中可以看到那些资源符号正在使用,那些未使用
4:可以删除未使用的资源符号 -- firecat注:个人感觉不靠谱,容易误删。

 

二、新建一个标准的MFC程序,留意到在Resource.h中默认有这样一段宏定义

// Next default values for new objects  

//

#ifdef APSTUDIO_INVOKED

#ifndef APSTUDIO_READONLY_SYMBOLS

#define _APS_3D_CONTROLS 1

#define _APS_NEXT_RESOURCE_VALUE 130

#define _APS_NEXT_COMMAND_VALUE 32773

#define _APS_NEXT_CONTROL_VALUE 1000

#define _APS_NEXT_SYMED_VALUE 101

#endif

#endif

对照了一下自己初建的一个简单的单文档程序,找到了一些端倪,#define _APS_NEXT_CONTROL_VALUE 1000,那么我就新建一个对话框,并在其中拉出一个控件,重新编译,之后回到Resource.h中查看,其ID值正是1000,其他几项不用解释相信大家已经知道怎么使用了。

firecat注:这些宏就是指定了每次新增控件时,ID从哪里开始算起。可以自行修改。

转载地址:https://libaineu2004.blog.csdn.net/article/details/90678212 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:MFCButton Memory leak(内存泄露和多字节内存溢出导致不能用的问题)
下一篇:开源项目推荐:Dlib C++ Libraries使用说明与内存泄漏问题解决(★firecat推荐★)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月23日 23时12分12秒