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,
    Das

    ofn.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 das

    char 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.lpstrInitialDir
    

    jetzt

    ofn.lpstrFile
    

    geschrieben und der Text wird angezeigt.

    ofn.lpstrFile ist eh das was ich eigentlich gesucht habe also hat sich das Problem jetzt ganz erledigt. ^^


Anmelden zum Antworten