GetOpenFileName Problem



  • Möchte mit dem Borland Builder eine Konsolenanwendung machen. Dazu möchte ich ein Dialog zum Öffnen einer Datei machen (so dass man sie auswählen kann). Habe im Forum jetzt herrausgefunden, dass das mit GetOpenFileName gehen müsste. Komme damit aber nicht zurecht. Hat jemand vielleicht ein funktionierendes Beispiel bitte Include-Dateien mit angeben. Es sollte aber in C sein.
    mfg Bronstein



  • Hat sich erledigt habe es herrausgefunden. Hier meine Lösung:

    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    //#include <studio.h>
    //#include <commdlg.h>    //This may cause problems depending on the compiler.
    #include <windows.h>
    #include <tchar.h>
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    
    int main(int argc, char* argv[])
    {
        //FILE *ifp, *ofp; 
        unsigned long file_record_off, file_record_len; 
        unsigned long file_off, file_len; 
        unsigned long data_file_len; 
        const char *data_file_name; 
        char file_name[0x20];
        char *buf; 
        unsigned long i; 
        int j; 
    
    OPENFILENAME ofn; 
    char szFile[260];
    HWND hwnd; 
    HANDLE hf; 
    
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = NULL;
    ofn.lpstrFile = szFile; 
    
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "All\0*.*\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    
    if (GetOpenFileName(&ofn)==TRUE)
        hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
            0, (LPSECURITY_ATTRIBUTES) NULL,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
            (HANDLE) NULL);
        printf(ofn.lpstrFile);
        getchar();
    }
    


  • Habe doch noch ein Problem mit:
    ofn.lpstrFilter = "mac-Dateien (*.txt)\0";
    Ich habe es so, damit zeigt er mir aber alle Dateien an, wie kann ich das ändern, damit er mir nur txt-Dateien anzeigt?



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • bronstein schrieb:

    Habe doch noch ein Problem mit:
    ofn.lpstrFilter = "mac-Dateien (*.txt)\0";
    Ich habe es so, damit zeigt er mir aber alle Dateien an, wie kann ich das ändern, damit er mir nur txt-Dateien anzeigt?

    Dein Filter ist falsch!

    Mach es so:

    ofn.lpstrFilter = "mac-Dateien (*.txt)\0*.txt\0\0";
    


  • Danke habe ein weiteres Problem, wie zeigt es mir das Formular im Vordergrund an. So wie ich es bis jetzt habe erscheint es immer im Hintergrund.



  • Bei ofn.hwndOwner das Handle deines Hauptfensters angeben 😉



  • Aber wie finde nichts in der Hilfe.



  • bronstein schrieb:

    Aber wie finde nichts in der Hilfe.

    Du erstellst doch ein normales Haupt-Fenster, oder nicht?! Mit dem Handle dieses Fensters musst du dann in der OPENFILENAME-Struktur das hwndOwner Member besetzen, bevor du GetOpenFileName aufrufst.
    Oder was genau ist dein Problem 😕



  • Wie kann ich das hwndOwner besetzen, damit meine Dialogbox im Vordergrund erscheint und nicht irgendwo unter anderen Fendstern wie z.B. Word oder so.



  • Ach es geht um fremde Anwendungen, die deinen Dialog verdecken?! Du selber hast gar kein normales Fenster, sehe ich das richtig? 🤡


Anmelden zum Antworten