首页 > 解决方案 > 使用 VS 在 c++ 中嵌入 bmp

问题描述

我正在使用 Visual Studio Community 2019 版本 16.10.4。我创建了一个显示 bmp 图片的 Win32 C++ 应用程序。我一直在尝试将图片嵌入到编译的 .exe 中,但没有成功。我的目标是创建 .exe 而不需要任何其他文件或文件夹。

我做了以下事情:

  1. 右键单击解决方案资源管理器中的应用程序名称
  2. 从下拉列表中选择添加并从弹出框中选择新项目
  3. 在左栏中选择 Resource,在右栏中选择 Resource File(.rc),然后在底部选择 Add 按钮
  4. 出现弹出:警告 RC4005: '_APS_NEXT_RESOURCE_VALUE':redefinition,选择 OK
  5. 在资源视图中,右键单击 Resource.rc 并选择底部的添加资源...
  6. 选择位图并选择新建 还有几个步骤,但在尝试解决问题后我迷失了方向。

在资源文件下的解决方案资源管理器中,我有 Resource.rc 和 art1.bmp。对于 art1.bmp 我有它,所以它不会从构建中排除。还创建了一个 resource.h 文件。

resource.h 有以下内容:

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

#define IDB_BITMAP1                     103

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        104
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

在 .rc 文件中,它具有以下(以及更多)

IDB_BITMAP1             BITMAP                  "art1.bmp"

我在项目根目录、Release 文件夹和 Debug 文件夹中有 art1.bmp。

在我将代码编译到 Release x86 之后,当我运行 .exe 时,图片显示没有任何问题(在 Debug 中也是如此)。如果我从 Release 文件夹中删除图片,图片将不再显示。

关于我错过了哪些步骤或我需要更改什么以使图片成为 .exe 的一部分而不是单独文件的任何建议?

标签: visual-studiovisual-c++

解决方案


非常感谢 Igor,在他的帮助下,这个问题终于解决了。

我的原始代码(当时没有发布)是:

bitmap = (HBITMAP)LoadImageA(NULL, "art1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 

伊戈尔正确地问“你在代码中的任何地方都使用 IDB_BITMAP1 吗?” 事实并非如此。

我设法走得更远,但仍然失败:

bitmap = (HBITMAP)LoadImageA(NULL, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 

我曾尝试用 NULL 替换 LR_LOADFROMFILE 但没有成功。Igor 提供的最后一个键是 GetModuleHandle(nullptr) 和 UINT 的 NULL。

bitmap = (HBITMAP)LoadImageA(GetModuleHandleA(nullptr), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, NULL);

推荐阅读