Probleme mit GetOpenFileName
-
void OpenFileBox(HWND hwnd) { OPENFILENAME ofn; char szFileName[MAX_PATH] = ""; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFilter = "Bitmap (*.bmp)\0*.bmp\0" "Alle Dateien (*.*)\0*.*\0"; ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrDefExt = "bmp"; if(GetOpenFileName(&ofn)) { PAINTSTRUCT ps; char str[200]; strcpy(str,ofn.lpstrInitialDir); HDC hDC; hDC = BeginPaint(hwnd,&ps); SetTextColor(hDC,RGB(255,255,255)); TextOut(hDC,50,50,str,200); EndPaint(hwnd,&ps); ReleaseDC(hwnd,hDC); } }Mein Ziel ist es hier eine Datei auszuwählen und dann ihren Pfad auf dem Bildschirm anzeigen zu lassen.
Datei auswählen funktioniert, aber wenn ich sie ausgewählt habe,dann stürzt das Programm ab.
-
Hi,
Dasofn.lpstrFilter = "Bitmap (.bmp)\0.bmp\0"
"Alle Dateien (.)\0*.*\0";muss so heisen
ofn.lpstrFilter = "Bitmap (*.bmp)\0*.bmp\0" "Alle Dateien (*.*)\0*.*\0\0";Die letzte Zeile musst du doppelt "Nullen".
Und daschar str[200];
strcpy(str,ofn.lpstrInitialDir);würde ich mir auch noch mal angucken. Oben nimmst du "MAX_PATH" und jetzt "nur" 200
und lpstrInitialDir dafür hast du garkein speicher reserviert du kannst höchstens ofn.lpstrFile nehmen.
Hoffe hab jetz kein mist erzählt
MfG schirrmie
-
schirrmie: String-Literale werden schon automatisch einmal null terminiert. Das hatten wir doch schon im anderen aktuellen Thread zu OFN.
-
Den Teil außerhalb der if-Schleife hab ich aus einem Tutorial kopiert und den Teil innerhalb der if-Schleife hab ich selbst geschrieben.
Darum einmal MAX_PATH und einmal 200.Ich hab jetzt statt
ofn.lpstrInitialDirjetzt
ofn.lpstrFilegeschrieben und der Text wird angezeigt.
ofn.lpstrFile ist eh das was ich eigentlich gesucht habe also hat sich das Problem jetzt ganz erledigt. ^^