visual-studio - 使用 VS 在 c++ 中嵌入 bmp
问题描述
我正在使用 Visual Studio Community 2019 版本 16.10.4。我创建了一个显示 bmp 图片的 Win32 C++ 应用程序。我一直在尝试将图片嵌入到编译的 .exe 中,但没有成功。我的目标是创建 .exe 而不需要任何其他文件或文件夹。
我做了以下事情:
- 右键单击解决方案资源管理器中的应用程序名称
- 从下拉列表中选择添加并从弹出框中选择新项目
- 在左栏中选择 Resource,在右栏中选择 Resource File(.rc),然后在底部选择 Add 按钮
- 出现弹出:警告 RC4005: '_APS_NEXT_RESOURCE_VALUE':redefinition,选择 OK
- 在资源视图中,右键单击 Resource.rc 并选择底部的添加资源...
- 选择位图并选择新建 还有几个步骤,但在尝试解决问题后我迷失了方向。
在资源文件下的解决方案资源管理器中,我有 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 的一部分而不是单独文件的任何建议?
解决方案
非常感谢 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);
推荐阅读
- xml - 空手道 xml bodyPath 在模拟中不匹配:场景匹配评估失败
- python - 为数据框中的日期列创建主题时间点
- python - 为什么我在处理上传图像时在 Flask 中不断收到“请求”对象没有属性“文件”?
- sql - SQL Server 中的 FOR XML:基于列公共值的元素
- theorem-proving - 感应问题
- javascript - 更改 JS 代码以使用 GTM(箭头函数和展开表达式)
- python - TypeError:“生成器”类型的对象没有 len() Python random.shuffle(param) 错误
- stored-procedures - 在 INSERT 或 UPDATE 记录存储过程中仅使用可更新表字段的子集?
- jquery - 使用带有 Jquery 验证器的 ajax 刷新页面
- c# - 我可以检查是否按下了任何 F 键吗?