我创建一个OPENFILENAME:
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导入某些内容时,它会显示“错误:无法打开文件。”:
sf::Texture _cursor;
if (!_cursor.loadFromFile("Resources/Metal_Norm.png"))
errorHandle("-Cursor Texture Couldn't Load");
不知道为什么如果有人有任何可能的答案就会发生此错误,我将不胜感激。
最佳答案
在浏览器中浏览时,GetOpenFileName
changes the current directory。
您可以设置一个标记OFN_NOCHANGEDIR
,以防止这种情况的发生,但是我注意到MSDN docs在某个时候已经更新,说它不适用于GetOpenFileName
。
您可以尝试一下,但是如果确实不起作用,解决方案是在调用GetCurrentDirectory
之前保存当前目录(使用GetOpenFileName
),然后再使用SetCurrentDirectory
还原它。