rc资源文件重写问题的解决

目标:通过预编译的方式修改debug文件夹下exe文件的图标,同时窗口图标和桌面任务栏图标也显示一致。


最终实现方法:

1、复制两个ico文件(a.ico和b.ico)到res文件夹下,工程目录下新建a.rc和b.rc两个文件(不用添加到工程中),分别写:

IDR_MAINFRAME           ICON                    "res\\a.ico"

IDR_MAINFRAME           ICON                    "res\\b.ico"

2、修改工程目录下原本就有的rc文件,将下面这一行注释掉:

IDR_MAINFRAME           ICON                    "res\\MyApp.ico"

ps:rc文件最上面无需再添加下面这行代码,添加的话调试运行时会出现本文最后提到的错误。

#include "res\MyIcon1.rc2"

3、VS里右键添加新建项,选择头文件(.h),这里取文件名为Init.h

文件内的代码两行如下:

#define _A_VERSION
 

ps:如果_A_VERSION后面没有一个回车换行的话,调试运行的时候会出错。

4、修改res文件夹下rc2文件:

/
// 在此处添加手动编辑的资源...
#include "..\Init.h"
#ifdef _A_VERSION
#include "a.rc"
#else
#include "b.rc"
#endif

/

经过上面四个步骤后,调试运行时exe文件能正常显示图标a.ico。接着修改Init.h文件为:

#define _B_VERSION
 

(↑注意此处是两行,因为有个回车换行↑)

再次调试运行,exe文件能显示为另一个图标b.ico。


实现过程:

最开始是想通过代码修改resource文件里icon的值来实现图标转换(因为exe文件的图标显示的是resource文件里ICON值最小的那个ICON),但是却不能在预编译的条件下通过代码来修改文件。后来想了下,修改文件的代码肯定是要经过编译的,所以这种方法不可行。接着是想通过修改rc文件来实现图标转换(即把上面第四步的代码改放在rc文件里),但实现后再添加字符串资源时,rc文件会自动改写,导致后面修改配置文件(即上面的Init.h文件)时均不能再转换图标,但是查到资料说TEXTINCLUDE里的2是只读符号指令,觉得应该可以添加预编译代码在这里,但又试了好久,还是没能实现。接着就是通过上述方法,结果发现是可以实现效果的。

小结:工程文件夹下的rc文件是属于编辑器自己的资源文件, 编译器自己维护的, 我们改了也有问题如果要自己添加, 编译器会有一个 rc2文件 , 这个就是用来给编辑的。



如果在调试运行时显示如下链接错误:

CVTRES : fatal error CVT1100: duplicate resource.  type:GROUP_ICON, name:128, language:0x0804
1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

则是由于资源重复定义了,这里是值为128的ICON重复定义。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值