【发布时间】:2015-09-06 04:59:03
【问题描述】:
我创建了一个 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");
如果有人有任何可能的答案,我将不胜感激。
【问题讨论】:
-
char szFile[260]; ofn.lpstrFile = (LPWSTR)szFile;这是非常错误的,等待发生的缓冲区溢出。使用类型转换来编译代码应该会引发你做错了什么的危险信号。将char szFile[260];更改为WCHAR szFile[MAX_PATH+1];,将ofn.nMaxFile = sizeof(szFile);更改为ofn.nMaxFile = MAX_PATH;,并摆脱类型转换。或者您可以改用GetOpenFileNameA(),并删除CW2A()。
标签: c++ windows winapi visual-c++ sfml