我创建一个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");不知道为什么会发生这个错误,如果有人有任何可能的答案,我会很感激的。
发布于 2015-06-20 07:01:37
当您在浏览器中导航时,GetOpenFileName changes the current directory。
您可以设置一个标志,OFN_NOCHANGEDIR,它本来是用来防止这种情况的,但我注意到MSDN docs已经在某个时刻被更新,说明它不适用于GetOpenFileName。
您可以尝试这样做,但是如果它不起作用,则解决方案是在调用GetCurrentDirectory之前保存当前目录(使用GetOpenFileName ),然后使用SetCurrentDirectory恢复它。
发布于 2015-07-09 07:24:57
在Potter 的帮助下,我为解决这个问题所做的一切
1.)保存了SFML应用程序的当前目录。
LPCWSTR mainDirectory = GetCurrentD();2.)执行了与GetOpenFileName()函数有关的操作。
Tilemap t(file.GetWindowWidth(), file.GetWindowHeight(), file.GetTileWidth(), file.GetTileHeight(), file.GetScale(), file.GetTop(), OpenFile());3.)然后将目录还原回我所保存的原始起始目录。
if (!SetCurrentDirectory(mainDirectory))
errorHandle(L"Didn't Set Directory");https://stackoverflow.com/questions/30951203
复制相似问题