Openfilename



  • Ich möchte sobald ich einen Button drücke, dass sich ein File Browser öffnet. Dazu habe ich folgenden Code gefunden:

    OPENFILENAME ofn;
    	char szFile[260];       // buffer for filename
    	              // owner window
    	HANDLE hf; 
    
    	ZeroMemory(&ofn, sizeof(OPENFILENAME));
    	ofn.lStructSize = sizeof(OPENFILENAME);
    	ofn.hwndOwner = IDD_KODIERUNG_DIALOG; 
    	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;
    
    	if (GetOpenFileName(&ofn)==TRUE) 
           hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
            0, (LPSECURITY_ATTRIBUTES) NULL,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
            (HANDLE) NULL);
    

    Nun habe ich das Problem, dass ich nicht weiß was ich unter ofn.hwndOwner eingeben muß. Eigentlich muß dort doch der Handle vom aktuellen Fenster rein oder? Kann mir da vielleicht jemand weiterhelfen?

    Danke!



  • Jo, mit einem Zeiger auf's parent müsste das gehen. Versuch's doch einfach mal mit "this"



  • Was ist wenn ich m_hWnd benutze? Ist das korrekt oder falsch?



  • Wenn du in einer CWnd abgeleiteten Klasse bist... geht das auch...

    ABER: Wir sind hier in MFC... da wird sowas nicht so gemacht!

    HANDLE      hFile       = NULL;
    const char  szFilters[] = "Textdatei (*.txt)|*.txt|Alle Dateien (*.*)|*.*||";
    CFileDialog dlgFile(TRUE, "txt", "*.txt", OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, szFilters, this);
    
    if (dlgFile.DoModal() == IDOK)
        ::CreateFile(dlgFile.GetFileName(), GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); 
    
    if (!hFile)
        return false;
    

    So in etwa ist es besser 😉

    Referenzen:
    CFileDialog Class
    CFileDialog::DoModal



  • Ok! SUPER Vielen Dank! Es geht 🙂


Anmelden zum Antworten