关于资源文件的几点说明
啊!
我在把我的主要的开发环境从Borland C++转向微软的Visual C++后最痛恨的一件事就是VC++处理资源腳本的方式.
在BC++中我可以自由地控制.rc文件的佈局和內容,而且在使用资源编辑器时,只有我在编辑器中作过修改的地方才在资源文件中被修改.令我十分沮丧的是,VC++的资源编辑器会完全地把你的.rc文件进行改写,并可能毀掉或是忽略掉你自己作的任何修改.
刚开始我是非常的郁闷,但是我基本上学会处理这种情況了,过了一些时间后就至少沒有那么差劲了,因为我一般不是完全手工写我的资源文件,只是在不能编辑器完成的时候作一点小小的修改.
兼容性
我试图把这个教程中的所有的样例做得能不做修改地在VC++和BC++中都能正确地编译.
在原来的版本的教程中,我用Borland的命名规则来命名资头文件,即project_name.rh.但是在VC++中这个头文件默认总是叫作resource.h,所以为了简便我在这个教程中作了一些调整修改,反正对BC++沒有什么影响的.
对于那些好奇的人,他们可以修改资源的名字,在VC++中可以手动修改.rc文件并在两个位置修换名字,一个是#include的地方,另外一个包含于一个TEXTINCLUDE资源之中.
另外一个问题就是VC++默认地需要在.rc文件中包含afxres.h,而BC++自动地定义了所有必要的预处理宏所以不需要这个包含.还有一件事就是afxres.h只存在于那些装了MFC的机器上,而不是所有的情況如此,就算是你只创建一个只需要总是存在的winres.h的API应用时也是这样.
因为我用VC++并用它的资源编辑器,所以我的解決方案是:稍微地改了下每个自动生成的.rc文件以包含下面这些东西:
#ifndef __BORLANDC__
#include "winres.h"
#endif
改之前默认的通常是这样的:
#include "afxres.h"
对于使用VC++的那些读者,你们可以在IDE中的”View>Resource
Includes”菜单下面找到改变这里的文本的选项.一般的实际工作中是不需要这样做的,我这里只是想让这些样例同时能在BC++和VC++编译.
对于使用BC++的读者,我对在.rc文件中加上这些额外由VC++编辑器生成的东西说声对不起,但是它们不会影响任何事情的.
在BC++下编译资源
我试了好久也沒有发现一个在BC++中简单的编译一个包含资源文件的程序,最后只有转向一种非优化的方式,你可以在教程包含的makefile中找到这种分配.
你也可以参閱免费的Borland C++命令行工具.
|