У меня очень странная проблема с GetOpenFileName.
Это ошибки без видимой причины, однако, если я вызову CommDlgExtendedError()
в проверке ошибок, ошибка никогда не произойдет.
Вот мой код:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
OPENFILENAME fm;
char flnm[MAX_PATH];
ZeroMemory(&fm, sizeof(fm));
fm.lStructSize = sizeof(OPENFILENAME);
fm.hwndOwner = NULL;
fm.lpstrFilter = "Text Files (*.txt)\0*.txt\0";
fm.lpstrFile = flnm;
fm.nMaxFile = MAX_PATH;
fm.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
fm.lpstrDefExt = "";
if(!GetOpenFileNameA(&fm))
{
MessageBoxA(NULL, "failed! :(", NULL, NULL);
}
return 0;
}
Что показано? "не удалось! :("
Если я уберу эту проверку, я увижу диалоговое окно файла. Однако это не работает, и поле имени файла предварительно заполнено случайным мусором.
Если я поменяю на:
if(!GetOpenFileNameA(&fm))
{
DWORD dwErr = CommDlgExtendedError();
MessageBoxA(NULL, "failed! :(", NULL, NULL);
}
"fail! :(" НЕ отображается. Диалоговое окно файла отображается и работает без проблем.
Что происходит!?!?