写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)

简介: 写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)

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


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


image.png


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、完整的源码和可执行文件请下载:


https://download.csdn.net/download/libaineu2004/11221588




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


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


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

2:右击资源视图中的 .rc 文件夹,打开 ID= 资源符号 项

3:在弹出的对话框中可以看到那些资源符号正在使用,那些未使用

4:可以删除未使用的资源符号 -- firecat注:个人感觉不靠谱,容易误删。

image.png



二、新建一个标准的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从哪里开始算起。可以自行修改。


相关文章
|
1月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
19 0
Linux c/c++文件的基本操作
|
5月前
|
存储 分布式数据库 API
技术好文:VisualC++查看文件被哪个进程占用
技术好文:VisualC++查看文件被哪个进程占用
|
2月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
1月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
46 0
|
1月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
66 0
|
2月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
2月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
32 0
|
2月前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
20 0
|
3月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
3月前
|
存储 数据挖掘 C语言
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】