我创建一个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_NO­CHANGE­DIR,以防止这种情况的发生,但是我注意到MSDN docs在某个时候已经更新,说它不适用于GetOpenFileName

您可以尝试一下,但是如果确实不起作用,解决方案是在调用GetCurrentDirectory之前保存当前目录(使用GetOpenFileName),然后再使用SetCurrentDirectory还原它。

09-16 12:42