我創建一個OPENFILENAME:GetOpenFileName()是插手SFML
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);'to'ofn.nMaxFile = MAX_PATH;',並去掉這個類型轉換。或者你可以使用'GetOpenFileNameA()'來代替'CW2A()'。 –