在MFC项目中使用资源文件的正确方法是什么
what is the proper method of using resource files in MFC project?
我制作了一个基于MFC的游戏,我的项目包括图像和声音。现在我想创建一个安装程序来分发它
我已经通过在例如中提供它们的确切路径来使用资源
img->Load(L"C:\Users\Ad33l's\Desktop\block mania\block mania\res\db.png");
MCIWndCreate(NULL, NULL,WS_POPUP|MCIWNDF_NOPLAYBAR|MCIWNDF_NOMENU,L"C:\Users\Ad33l's\Desktop\block mania\block mania\res\tick.wav");
1.有人能告诉我什么方法可以避免对实际资源路径进行硬编码吗?因为这些资源文件在其他计算机中不会出现在同一路径上?
2.还指导我在创建独立SETUP(我使用的是高级安装程序)时处理这些资源文件
(作为实际答案)。
不要使用绝对路径,始终使用相对路径;相对于EXE文件是一种解决方案。
EXE路径可以使用GetModuleFileName找到。
char appPath[MAXFILENAMELEN];
GetModuleFileName(NULL, appPath, MAXFILENAMELEN);
(附录)appPath名称具有误导性,它包含应用程序的全名;您需要从完整的应用程序名称中提取路径。
我们这样做:
(编辑以使其可在unicode中编译)
TCHAR applicationPath[MAX_PATH];
GetModuleFileName(NULL, applicationPath, MAX_PATH);
CString sSoundFile(applicationPath);
PathRemoveFileSpec(sSoundFile.GetBuffer());
sSoundFile.ReleaseBuffer();
从那里,你可以做一些类似(伪代码ish)的事情:
img.Load( appPath + "//Images//db.png" );
你可以有一个变量来保存他们想要安装程序的目录。在他们选择了他们想要安装的目录后,就不用了。或者,您也可以使用系统文件夹,如appdata文件夹
第一个解决方案是将安装项目配置为安装DesktopFolder\block-mania\block-mania\res下的安装文件。然后,您可以在应用程序中访问当前用户桌面位置,并将剩余的修复位置附加到该位置(block mania\block mania\res)。
另一种解决方案是将安装项目配置为在安装时创建注册表,该注册表将存储安装文件的路径。然后,您的应用程序可以从注册表中读取安装路径。
最后,您还可以在安装时创建包含安装文件路径的环境变量,然后在应用程序中使用环境变量来访问已安装文件的位置。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 通过JNI传递数据数组的最快方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在C++中包含原型文件的正确方法是什么?
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- 从长整整转换为uint64_t的推荐方法是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?