GetOpenFileName .. hilfe



  • hallo,

    ich hab noch nicht wirklich viel erfahrung mit c++ und den ganzen sachen. *nicht lachen* 😞

    momentan stehe ich vor folgendem problem: ich suche eine erklärung der funktion "GetOpenFileName()" .. d.h. ich klick auf einen open-button in einem opengl-interface und dann soll sich ein datei-menu öffnen, in dem ich dann eine datei aussuchen kann und dieser name der datei dann in einer variable oder ähnlichem gespeichert wird.

    ich hab die funktionsbeschreibung (hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/usingcommondialogboxes.asp) gefunden, aber ich steig da nicht durch; ich weiss nicht, wie ich dieses konstrukt in mein programm einbauen soll .. kann mir bitte jemand helfen? 😕

    danke.



  • ; ich weiss nicht, wie ich dieses konstrukt in mein programm einbauen soll ..

    ermmm.. copy&paste 😕



  • ja, soweit war ich auch schon .. aber ich muss ja sicher noch irgendwelche dateien includen, und ich verstehe auch nicht, was da genau in jedem schritt passiert .. das wüsste ich halt gern ..



  • Include brauchst du kein zusätzliches, GetOpenFileName ist in commdlg.h definiert, welche schon über die windows.h eingebunden ist.
    (Falls es linker probleme geben sollte, Comdlg32.lib dazulinken).

    OPENFILENAME ofn;       // common dialog box structure
    char szFile[260];       // buffer for file name
    HWND hwnd;              // owner window
    HANDLE hf;              // file handle
    
     // setzt erst mal die ganze struktur auf 0
    ZeroMemory(&ofn, sizeof(ofn));
    // initialisiere die lStructSize variable
    // braucht windows um zu checken ob du auch wirklich die richtige struktur übergibts
    ofn.lStructSize = sizeof(ofn);
    // hwnd ist das handle parent fenster, wenn du den code aus deiner fenster 
    // klasse aufrufst mach aus dem hwnd ein m_hWnd und es passt
    ofn.hwndOwner = hwnd;
    // hier übergibts du nen buffer in dem window den ausgewählten filenamen 
    // speichern kann
    ofn.lpstrFile = szFile;
    //
    // Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
    // use the contents of szFile to initialize itself.
    //
    ofn.lpstrFile[0] = '\0';
    // die maximale länge des filenames, braucht es damit windows nicht über deinen
    // buffer hinaus schreibst falls der namen länger ist als einer buffer größe
    ofn.nMaxFile = sizeof(szFile);
    // das ist das was du unter dateityp in nem öffnen dialog siehst
    // hier wärs: All (*.*) und Text (*.TXT)
    ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    // weis ich net auswending guckst du MSDN
    ofn.nFilterIndex = 1;
    // buffer du den filenamen ohne path, brauchen wir net also NULL
    ofn.lpstrFileTitle = NULL;
    // selbe wie nMaxFile nur diesmal für lpstrFileTitle 
    ofn.nMaxFileTitle = 0;
    // verzeichnis von den die suche los gehen soll
    ofn.lpstrInitialDir = NULL;
    // flags: guckst du MSDN sind zuviele um hier alle aufzulisten =)
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
    
    // Display the Open dialog box. 
    if (GetOpenFileName(&ofn)==TRUE) 
        hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
            0, (LPSECURITY_ATTRIBUTES) NULL,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
            (HANDLE) NULL);
    

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxstructures/openfilename.asp



  • danke dir .. ich werd mal kucken, wie weit ich damit komme 🙄



  • hallo,

    das programm wird jetzt compiliert und startet auch, aber sobald ich auf den button im interface drücke, kommt folgende fehlermeldung:

    "Run-Time Chack Failure #3 - The variable "hwnd" is being used without defined"



  • hat sich erledigt .. 😉

    ähm, kann ich den style von diesen menus ändern ?!

    noch ne frage: wie kann ich den dateinamen, der geöffnet werden soll, übergeben an eine andere funktion???


Anmelden zum Antworten