@neb : Primer iz MSDN dokumentacije je dobar, samo ti je potrebno da hWnd bude validan handle do prozora. Oni u svakom primeru stavljaju takve promenljive, tj. kao lokalne čisto zbog formalnosti, a time podrazumevaju da je taj hanlde već alociran i validan.
Ono što ti ja prelažem da uradiš je sledeće :
Code:
// gore si inicirao ofn i sada ovo ...
if (!GetOpenFileName(&ofn)){
DWORD dwError = ComDlgExtendedError();
if (dwError != 0){ // ako korisnik nije pritisnuo Cancel dugme
LPVOID lpMsg = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), (LPTSTR)&lpMsg, 0, NULL);
MessageBox(0, (LPCTSTR)lpMsg, "Greška", MB_OK);
LocalFree((HLOCAL)lpMsg):
return FALSE;
}
}
// ovde otvori fajl...
Dakle, ako GetOpenFileName vrati grešku, izbaciće ti tačno poruku o tome šta je pri njenom izvršavanju pošlo naopako. U MSDN dokumentaciji imaš čitav spisak povratnih vrednosti Common Dialog funkcija.
Obično je to pogrešno inicirana ofn promenljiva.
Ja sam recimo koristio ovakav kod :
Code:
HWND hMojGlavniProzor; // globalna
//....
LPCTSTR szOpenFileExtensions = \
"C/C++ Files ( *.c,*.cpp, *.cxx )\0*.c;*.cpp;*.cxx\0"
"Header Files ( *.h, *.hpp )\0*.h;*.hpp\0"
"All Files\0*.*\0";
{
static char FileName[MAX_PATH];
static char FileNameShort[MAX_PATH/4];
static char FileDir[MAX_PATH];
OPENFILENAME ofn;
WORD nFileOffset = 0;
WORD nFilterIndex = 1;
ZeroMemory(&ofn, sizeof(ofn));
char szCaption[MAX_LOADSTRING];
ZeroMemory(szCaption, sizeof(szCaption));
LoadString(hMojProgram, IDS_STRING_OPENDIALOGTITLE, szCaption, MAX_LOADSTRING);
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
ofn.hwndOwner = hMojGlavniProzor;
#if (_WIN32_WINNT >= 0x0500)
ofn.FlagsEx = OFN_EX_NOPLACESBAR;
#endif
ofn.lpstrFileTitle = FileNameShort;
ofn.lpstrFile = FileName;
ofn.lpstrInitialDir = FileDir;
ofn.lpstrTitle = szCaption;
ofn.lStructSize = sizeof(ofn);
ofn.nFileOffset = nFileOffset;
ofn.nFilterIndex = nFilterIndex;
ofn.nMaxFile = MAX_PATH;
ofn.nMaxFileTitle = MAX_PATH/4;
ofn.lpstrFilter = szOpenFileExtensions;
if (!GetOpenFileName(&ofn)) //.......
}