Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ resource.h中的宏用于什么?_C++_Macros_Resource Files - Fatal编程技术网

C++ resource.h中的宏用于什么?

C++ resource.h中的宏用于什么?,c++,macros,resource-files,C++,Macros,Resource Files,在visual studio中创建资源文件时,IDE会自动生成名为resource.h的头文件,其中包含以下文本: //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // Used by BackupRestore.rc // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_

在visual studio中创建资源文件时,IDE会自动生成名为resource.h的头文件,其中包含以下文本:

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by BackupRestore.rc

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        101
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif
正如您所看到的,它评论并说它们是“新对象的默认值”。这到底意味着什么?默认情况下,它们是否引用到其他任何地方,如果没有,它们将在何处使用?我正在尝试用最少的代码和文件创建一个项目,并且已经测试过删除resource.h文件,没有它解决方案似乎构建得很好,所以我想知道它是否必要,或者删除它是否会导致将来的问题

总之: resource.h文件及其内容用于什么? 默认情况下,是否在其他地方使用定义的宏? 如果有的话,程序员什么时候可以在代码中引用/使用它们? 它们是必要的吗?移除它们是否会产生未来的问题

谢谢-请注意我是C++和宏的新手。

< P> <

\u APS\u NEXT\u RESOURCE\u VALUE
是将用于对话框资源、菜单资源等的下一个符号值。资源符号值的有效范围为
1
0x6FFF

\u APS\u NEXT\u COMMAND\u VALUE
是将用于命令标识的下一个符号值。命令符号值的有效范围为
0x8000
0xDFFF

\u APS\u NEXT\u CONTROL\u VALUE
是将用于对话框控件的下一个符号值。对话框控件符号值的有效范围为
8
0xDFFF

\u APS\u NEXT\u SYMED\u VALUE
是使用符号浏览器中的新命令手动指定符号值时将发出的下一个符号值

因此,基本上,如果您在实际的对话框编辑器中,当您单击一个新按钮时(例如),它将跟踪下一个可用的资源ID。资源ID通常用于跟踪静态文本(例如,字段标签)、绑定等

如果您定义了一个资源ID,那么它必须是一个较小的值,下一个是
\u APS\u
无论什么。例如,在
资源.h
中,您可能有

#define IDC_SOME_RADIO_BUTTON    1056
然后以后你必须更新

#define _APS_NEXT_CONTROL_VALUE       1057
同样,下一次单击某个按钮时,它会得到一个唯一的ID。它们必须是唯一的,因为它们只是处理器前的宏,当您尝试使用该资源ID进行某些操作时,它们将被替换。比如说

void HandleRadioButtion()
{
    // do something important
}
然后可以使用资源ID将其绑定到函数

BEGIN_MESSAGE_MAP(SomeDlg, CDialog)
    ON_BN_CLICKED(IDC_SOME_RADIO_BUTTON, HandleRadioButton)
END_MESSAGE_MAP()

这些宏只用于IDE。代码本身不会在任何地方引用它们


要创建最少的资源文件,您可以跳过使用IDE来创建资源,而是从头开始编写它们(作为纯文本文件)。事实上,在IDE实现所有这些自动化之前,就是这样做的。资源文件的格式是。

这个链接非常有用,因为在谷歌中输入这些内容几乎什么都没有给我。其他问题呢?你的问题有点宽泛,所以很难明确知道你在问什么。我试图扩展我的答案,以举例说明您一般如何使用资源。如果您当前的问题得到了回答,并且您还有后续问题,请随意创建一个新帖子。堆栈溢出更适合于单问题单答案风格的帖子。我即将将其标记为答案,但我的主要问题是,它们对于提供DLL版本的资源文件来说是必要的还是不必要的?它们非常重要,但对版本控制本身来说并不重要。如前所述,确保
.rc
文件的一致性和正确性非常重要。当您添加新资源(如文本字符串、按钮等)时,
resource.h
文件有助于确保所有资源ID都是唯一的。@Matt conciser这两点:(1)它们只是定义,没有在您的代码中使用,因此在您的项目中没有任何结果。(2) 它们对于资源编辑器的正确运行至关重要,如果删除它们,很可能会损坏项目。给定(1)和(2)为什么要弄乱它们。Resource.h包含在项目的.rc文件中定义的资源ID。它允许您的windows应用程序引用其各种资源:对话框布局、图标、位图和本地化文本字符串。那么,如果删除它会发生什么?有什么持久的影响吗?my.rc中没有提到任何已定义的宏(启动APS的宏)file@Matt它们被RC编辑器使用(读写),弄乱它们并破坏项目,因为RC编辑器在创建资源时不知道下一个要使用的值。Resource.h是源文件集的重要组件。不要删除!删除APS*宏将影响visual studio资源管理器,其中包括对话框编辑器、文本资源编辑器等。。。如果你需要更新应用程序的外观,这会让你的生活很痛苦。我的资源文件只是在查看DLL属性时给出DLL的版本。您之前关于“请勿删除”的评论是否仍然有效?