GetOpenFileName()正在干扰SFML

Sha*_*itz 3 c++ windows winapi visual-c++ sfml

我创建了一个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");
Run Code Online (Sandbox Code Playgroud)

但是当我尝试通过SMFL导入某些内容时,它会显示"错误:无法打开文件.":

sf::Texture _cursor;
    if (!_cursor.loadFromFile("Resources/Metal_Norm.png"))
        errorHandle("-Cursor Texture Couldn't Load");
Run Code Online (Sandbox Code Playgroud)

如果有人有任何可能的答案我不胜感激,不知道为什么会出现这个错误.

Jon*_*ter 6

GetOpenFileName 在浏览器中导航时更改当前目录.

有一个标志你可以设置,OFN_NO­CHANGE­DIR这应该是为了防止这种情况,但我注意到MSDN文档在某些时候已经更新,说它不起作用GetOpenFileName.

您可以尝试,但如果它确实无效,解决方案是GetCurrentDirectory在调用之前保存当前目录(使用)GetOpenFileName,然后使用后恢复它SetCurrentDirectory.

  • 你真正需要做的是停止在gui app中使用工作目录.这是不可预测的.完全没理由它应该是包含exe文件的目录. (3认同)