首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetOpenFileName()正在干扰SFML

GetOpenFileName()正在干扰SFML
EN

Stack Overflow用户
提问于 2015-06-20 06:55:06
回答 2查看 131关注 0票数 3

我创建一个OPENFILENAME:

代码语言:javascript
复制
OPENFILENAME ofn;   
char szFile[260];      
HWND hwnd = NULL;             

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = (LPWSTR)szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"PNG Files\0*.PNG*\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

std::string input;
if (GetOpenFileName(&ofn))
{
    input = CW2A(ofn.lpstrFile);
    std::cout << input << std::endl;
}
else
    errorHandle("Open Dialog Problem");

但是,当我试图通过SMFL导入一些东西时,它会说“错误:无法打开文件”:

代码语言:javascript
复制
sf::Texture _cursor;
    if (!_cursor.loadFromFile("Resources/Metal_Norm.png"))
        errorHandle("-Cursor Texture Couldn't Load");

不知道为什么会发生这个错误,如果有人有任何可能的答案,我会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-20 07:01:37

当您在浏览器中导航时,GetOpenFileName changes the current directory

您可以设置一个标志,OFN_NO­CHANGE­DIR,它本来是用来防止这种情况的,但我注意到MSDN docs已经在某个时刻被更新,说明它不适用于GetOpenFileName

您可以尝试这样做,但是如果它不起作用,则解决方案是在调用GetCurrentDirectory之前保存当前目录(使用GetOpenFileName ),然后使用SetCurrentDirectory恢复它。

票数 6
EN

Stack Overflow用户

发布于 2015-07-09 07:24:57

在Potter 的帮助下,我为解决这个问题所做的一切

1.)保存了SFML应用程序的当前目录。

代码语言:javascript
复制
LPCWSTR mainDirectory = GetCurrentD();

2.)执行了与GetOpenFileName()函数有关的操作。

代码语言:javascript
复制
Tilemap t(file.GetWindowWidth(), file.GetWindowHeight(), file.GetTileWidth(), file.GetTileHeight(), file.GetScale(), file.GetTop(), OpenFile());

3.)然后将目录还原回我所保存的原始起始目录。

代码语言:javascript
复制
if (!SetCurrentDirectory(mainDirectory))
    errorHandle(L"Didn't Set Directory");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30951203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档