resource.h中的宏用于什么?

Mat*_*att 5 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_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
Run Code Online (Sandbox Code Playgroud)

正如你可以看到它的评论并说它们是"新对象的默认值".这到底是什么意思?默认情况下是否在其他地方引用它们,如果不是,它们将在何处使用?我正在尝试使用最少量的代码和文件创建一个项目,并且已经测试了删除resource.h文件,并且解决方案似乎在没有它的情况下构建正常,所以我想知道它是否必不可少或者如果删除它将导致未来的问题.

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

在此先感谢 - 请注意我是C++和宏的新手.

Cor*_*mer 6

文档中

_APS_NEXT_RESOURCE_VALUE是将用于对话框资源,菜单资源等的下一个符号值.资源符号值的有效范围是10x6FFF.

_APS_NEXT_COMMAND_VALUE是用于命令标识的下一个符号值.对命令符号值的有效范围是0x80000xDFFF.

_APS_NEXT_CONTROL_VALUE是将用于对话框控件的下一个符号值.对于对话框控件符号值的有效范围是80xDFFF.

_APS_NEXT_SYMED_VALUE 是使用符号浏览器中的"新建"命令手动分配符号值时将发出的下一个符号值.

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

如果您已经定义了资源ID,那么它必须是一个较小的值_APS_NEXT.例如,resource.h你可能有

#define IDC_SOME_RADIO_BUTTON    1056
Run Code Online (Sandbox Code Playgroud)

然后你必须更新

#define _APS_NEXT_CONTROL_VALUE       1057
Run Code Online (Sandbox Code Playgroud)

再次这样,下次单击按钮时,它将获得唯一ID.它们必须是唯一的,因为它们只是在您尝试将该资源ID用于某些内容时将被替换的预处理器宏.例如

void HandleRadioButtion()
{
    // do something important
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用资源ID将其绑定到函数

BEGIN_MESSAGE_MAP(SomeDlg, CDialog)
    ON_BN_CLICKED(IDC_SOME_RADIO_BUTTON, HandleRadioButton)
END_MESSAGE_MAP()
Run Code Online (Sandbox Code Playgroud)

  • 此链接非常有用,因为在Google中输入这些内容几乎没有给我任何帮助.其他问题呢? (2认同)
  • @Matt conciser这两点:(1)它们只是#define(s)而没有在你的代码中使用,因此你的项目中没有任何结果.(2)它们对资源编辑器的正确运行至关重要,如果删除它们,很可能会损坏您的项目.鉴于(1)和(2)为什么要混淆它们. (2认同)

Adr*_*thy 5

这些宏仅适用于 IDE。代码本身没有在任何地方引用它们。

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