在MFC项目中使用资源文件的正确方法是什么

what is the proper method of using resource files in MFC project?

本文关键字:方法 是什么 源文件 资源 项目 MFC      更新时间:2023-10-16

我制作了一个基于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)。

另一种解决方案是将安装项目配置为在安装时创建注册表,该注册表将存储安装文件的路径。然后,您的应用程序可以从注册表中读取安装路径。

最后,您还可以在安装时创建包含安装文件路径的环境变量,然后在应用程序中使用环境变量来访问已安装文件的位置。