This test app worked fine for me. Maybe it'll help.
Code:
enum
{
OPENDLG_OPENFILE,
OPENDLG_SAVEFILE,
};
int opendlg(int type, const TCHAR *title, TCHAR *file, const TCHAR *filt)
{
OPENFILENAME ofn = {0};
TCHAR _sbuf[MAX_PATH];
TCHAR *initDir = _sbuf;
if (!SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, _sbuf)))
{
initDir = NULL;
}
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFilter = filt;
ofn.nFilterIndex = (filt != NULL ? 1 : 0);
ofn.lpstrFile = file;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrInitialDir = initDir;
ofn.lpstrTitle = title;
ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY |
OFN_NONETWORKBUTTON | OFN_NOREADONLYRETURN;
if (type == OPENDLG_OPENFILE)
{
ofn.Flags |= OFN_FILEMUSTEXIST;
}
else if (type == OPENDLG_SAVEFILE)
{
ofn.Flags |= OFN_OVERWRITEPROMPT;
}
if ((type == OPENDLG_OPENFILE && !GetOpenFileName(&ofn)) ||
(type == OPENDLG_SAVEFILE && !GetSaveFileName(&ofn)))
{
if (CommDlgExtendedError() == 0)
{
return 0;
}
return -1;
}
return ofn.nFileExtension + ofn.nFileOffset;
}
int main()
{
TCHAR filename[MAX_PATH] = {0};
TCHAR filter[MAX_PATH] =
{
TEXT("Text Files\0*.txt\0")
TEXT("Bin Files\0*.bin\0")
};
int res;
_tprintf(TEXT("WINVER = 0x%04X\n"), WINVER);
_tprintf(TEXT("_WIN32_WINNT = 0x%04X\n"), _WIN32_WINNT);
res = opendlg(OPENDLG_OPENFILE, TEXT("*** Test 1 ***"), filename, NULL);
_tprintf(TEXT("res = %d\nfile = %s\n"), res, filename);
res = opendlg(OPENDLG_OPENFILE, TEXT("*** Test 2 ***"), filename, filter);
_tprintf(TEXT("res = %d\nfile = %s\n"), res, filename);
return 0;
}
gg