GetOpenFileName



  • Hi, also die Struktur sieht so aus

    OPENFILENAME ofn; // common dialog box structure
    char szFile[260]; // buffer for file name

    // Initialize OPENFILENAME

    szFile[0] = '\0';
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = hWnd;
    ofn.lpstrFile = szFile;
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "All\0*.\0Text\0.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

    Ein GetOpenFileName gibt an dieser Stelle 0 zurück.

    DWORD test;
    test = CommDlgExtendedError();

    ergibt für Test: CDERR_STRUCTSIZE

    Thomas



  • Erstens solltest du ALLE Members der Struktur ausfüllen (z.B. hInstance 😉 ), und zweitens solltest du in sizeof() den Typnamen verwenden.



  • Hi, danke

    Das ganze sieht jetzt so aus:

    OPENFILENAME ofn; // common dialog box structure
    char szFile[260]; // buffer for file name

    // Initialize OPENFILENAME

    szFile[0] = '\0';
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = hWnd; // Das Hauptfenster
    ofn.lpstrFile = szFile;
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = TEXT("All\0*.\0Text\0.TXT\0");
    ofn.lpstrCustomFilter = 0;
    ofn.nMaxCustFilter = 0;
    ofn.nFileOffset = 0;
    ofn.nFileExtension = 0;
    ofn.lpfnHook = NULL;
    ofn.lpTemplateName = NULL;
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = 0;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.lpstrTitle = NULL;
    ofn.Flags = 0;
    ofn.hInstance = 0;

    Geht aber trotzdem nicht!

    Thomas



  • *lol* Wenn du hInstance auch auf NULL setzt, dann KANN es ja auch nicht funktionieren. Achte mal auf den ersten Parameter der WinMain.



  • Ok, danke.
    Hatte das aus nem Beispiel übernommen
    jetzt:
    ofn.hInstance = hInstance;

    Geht aber immer noch nicht!



  • TEXT("All\0*.*\0\0Text\0*.TXT\0\0");
    


  • Hi, danke für die Geduld.
    Habs geändert, aber es geht immer noch nicht.
    Es kommt immernoch CDERR_STRUCTSIZE.

    Könnte es sein, dass es gar nicht an sowas liegt?
    Die ersten Zeilen vom Programm:

    #include <windows.h>
    #include <commdlg.h>
    #include <CDERR.h>
    #include <string>
    #pragma comment(lib,"comdlg32.lib")

    using namespace std;

    ? Fehlt hier vielleicht was?



    1. Die HINSTANCE brauchst Du nur, wenn Du bei den Flags OFN_ENABLETEMPLATE mit angibst.

    2. Du brauchst auch nicht, wie von WebFritzi vorgeschlagen, den Filter-String mit drei Nullern abzuschließen. Zwei reichen völlig aus, das hattest Du schon richtig.

    3. Wenn Du CDERR_STRUCTSIZE als Fehler bekommst, sollte dies das Problem lösen:

    ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400
    


  • Danke King!!!

    WebFritzi ist eh ein Dummkopf!"



  • Hi,

    ich weiß zwar nicht, wer sich da für mich ausgegeben hat, aber auf jeden Fall war der letzte Eintrag nicht von mir!!!!!!!!

    @King: Danke, jetzt funktionierts!

    Thomas



  • Hab was dazu bei msdn gefunden.
    Und es wundert mich schon ein bisschen. Ich nämlich kein NT 4.0, sondern Win98SE..



  • [EDIT] War Blödsinn [/EDIT]

    [ Dieser Beitrag wurde am 22.02.2003 um 20:09 Uhr von WebFritzi editiert. ]



  • Wenn es nach Blödsinn ging, schreib am besten garkeinen Beitrag mehr.



  • Hehe, du kleiner Idiot! Um dich zu ärgern schreib ich gleich gaaanz viel! 😃


Anmelden zum Antworten