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

时间:2014-10-08 14:27:10

标签: c++ visual-studio-2012 mfc advanced-installer

我做了一个基于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期间处理这些资源文件(我正在使用高级安装程序)

3 个答案:

答案 0 :(得分:0)

您可以使用一个变量来保存他们想要安装程序的目录。在他们选择要安装它的目录后,请执行此操作。或者您也可以使用系统文件夹,如appdata文件夹

答案 1 :(得分:0)

(作为实际答案)。

不要使用绝对路径,总是使用相对路径;相对于你的EXE文件是一个解决方案。

可以使用GetModuleFileName找到EXE路径。

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();

从那里,您可以执行类似(伪代码)的操作:

img.Load( appPath + "//Images//db.png" );

答案 2 :(得分:0)

第一个解决方案是配置您的安装项目以在DesktopFolder \ block mania \ block mania \ res下安装安装文件。然后,您可以在应用程序中访问当前用户Desktop位置,并将剩余的修复位置附加到其中(块mania \ block mania \ res)。

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

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