我希望能够动态更改资源文件中的代码,具体取决于正在运行的应用程序版本。例如,我有一个关于菜单。我希望about menuitem基于预处理器指令有不同的描述。我遇到的问题是我能够添加代码。但是当我编辑资源文件并保存它时,.aps文件会覆盖我的预处理程序指令。我怎么能绕过这个?下面的代码是我想在资源脚本中使用的示例。
IDR_EXAMPLE_MENU MENU
BEGIN
/*
Other Menu items
*/
POPUP "&Help"
BEGIN
MENUITEM "&Help Topics", ID_HELP_FINDER
MENUITEM SEPARATOR
#ifdef TEST_APP
MENUITEM "&About TEST...", ID_APP_ABOUT
#else
MENUITEM "&About RELEASE...", ID_APP_ABOUT
#endif
END
END
如果我正在运行TEST版本,我希望它在menuitem中显示“About TEST”,如果是RELEASE版本,我希望它显示“关于RELEASE” 如何在保存.rc文件时没有.aps文件覆盖预处理程序指令的情况下,如何将这样的代码添加到我的资源文件中?
修改:This explains how files are affected by resource editing.
答案 0 :(得分:3)
在资源文件中也可以有两个像e菜单这样的资源。
每个资源的属性都可以包含条件。并且您可以在资源中使用两次具有相同名称的资源。
您可以将条件_DEBUG添加到第一个资源。只需复制它并给出条件_RELEASE。将其重命名为相同的Id。
答案 1 :(得分:1)
您可以将代码放在单独的rc文件中,并使用 Set includes 对话框的Compile-Time Directives字段将其包含在内。见Using Multiple Resource Files in the Same Project
如果资源没有经常更改,您可以将它们移动到资源编辑器未修改的.rc2文件。您可以自由使用预处理器。
另一个选项是创建多个.rc文件(例如复制原始.rc文件并删除其余文件)并将它们有条件地包含在"资源包含..>编译时指令"资源编辑器存储在.rc文件中的部分,并按原样在.rc文件的末尾重复。
例如:
创建两个.rc文件,如
ResourcesDebug.rc:
....
POPUP "&Help"
BEGIN
MENUITEM "&Help Topics", ID_HELP_FINDER
MENUITEM SEPARATOR
MENUITEM "&About TEST...", ID_APP_ABOUT
END
END
....
ResourcesRelease.rc:
....
POPUP "&Help"
BEGIN
MENUITEM "&Help Topics", ID_HELP_FINDER
MENUITEM SEPARATOR
MENUITEM "&About RELEASE...", ID_APP_ABOUT
END
END
....
您可以将它们添加到您的仓库,但无需将它们添加到项目中。但是如果将它们添加到项目中,则必须将它们从编译中排除。
编译时指令(资源视图>右键单击.rc):
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#include "res\TestApp.rc2" // non-Microsoft Visual C++ edited resources
#ifdef TEST_APP
#include ResourcesDebug.rc
#else
#include ResourcesRelease.rc
#endif
....
更多链接:
答案 2 :(得分:1)
您希望能够使用VS的资源编辑器,但它只知道如何生成1种.rc输出,并且没有任何#define值。你不可能两种方式。您可以使用编译器指令并手动编辑.rc(或.rc2)文件,或接受VS的输出。
可能是允许您使用资源编辑器在VS中编辑文件,然后编写一个后处理程序,该程序可以理解.RC的一般内容并重新生成"期望&# 34; .RC用编译器指令替换原始内容。它是可行的,但权衡取决于您的应用程序。