Standarddialog "Datei"



  • Guten Abend Alle miteinander,

    ich habe mal wieder ein Problem. Es geht diesmal um den Standarddialog zum Auswählen und anschl. einlesen einer *.csv-Datei. Es funktioniert alles prima, wenn ich tatsächlich eine Datei auswähle. Wähle ich keine aus, drücke also "Abbrechen", so stürzt mein Programm mächtig ab. Hat einer eine Idee dazu? Meine Vermutung ist, dass irgendeine Variable keinen oder einen uninitialisierten Inhalt hat. Ist das so?

    Danke schon mal für Eure Hilfe! 🙂

    Hier noch ein bisschen Code:

    // Definition der Hauptprozedur
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        COLORREF clrOldTextColor;
    
        switch (message)
        {
            case WM_CREATE:
            {
                // Standarddialoge initialisieren
                PopFileInitialize (hWnd) ;
                return 0;
            }
            case WM_COMMAND:
                switch(LOWORD(wParam))
                {
                    //Menüpunkt "Datei"
                    case ID_DATEI_IMPORT:
                    {
                        // Hier Standard-File-Dialog einfügen
                        PopFileOpenDlg (hWnd, szFileName, szTitleName);
                        // Datei importieren
                        DateiImport(hWnd);
                        return 0;
                    }
                    case ID_DATEI_ANZEIGEN:
                    {
                                        DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG9),hWnd,DlgProc9);
                        return 0;
                    }
                            case WM_PAINT:
            {
                PAINTSTRUCT paintst;
                HDC hDC = BeginPaint(hWnd, &paintst);
    
                RECT rcClient;
                SetRect(&rcClient, 0, 0, 0, 0);
                GetClientRect(hWnd, &rcClient);
                nOldBkMode = SetBkMode(hDC, TRANSPARENT);
                clrOldTextColor = SetTextColor(hDC, GetSysColor(COLOR_WINDOWTEXT));
                DrawText(
                hDC,
                "",
                -1,
                &rcClient,
                DT_SINGLELINE|
                DT_CENTER|
                DT_VCENTER );
                SetTextColor(hDC, clrOldTextColor);
                SetBkMode(hDC, nOldBkMode);
                EndPaint(hWnd, &paintst);
                return 0;
            }
            case WM_DESTROY:
            {
             PostQuitMessage(0);
             return 0;
            }
       }
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    
    void PopFileInitialize (HWND hwnd)
    {
         static TCHAR szFilter[] = TEXT ("ASCII-Dateien (*.CSV)\0*.csv\0") \
                                   TEXT ("Textdateien (*.TXT)\0*.txt\0")  \
                                   TEXT ("Alle Dateien (*.*)\0*.*\0\0") ;
    
         ofn.lStructSize       = sizeof (OPENFILENAME) ;
         ofn.hwndOwner         = hwnd ;
         ofn.hInstance         = NULL ;
         ofn.lpstrFilter       = szFilter ;
         ofn.lpstrCustomFilter = NULL ;
         ofn.nMaxCustFilter    = 0 ;
         ofn.nFilterIndex      = 0 ;
         ofn.lpstrFile         = NULL ;          // Bei Öffnen bzw. Schließen gesetzt
         ofn.nMaxFile          = MAX_PATH ;
         ofn.lpstrFileTitle    = NULL ;          // Bei Öffnen bzw. Schließen gesetzt
         ofn.nMaxFileTitle     = MAX_PATH ;
         ofn.lpstrInitialDir   = NULL ;
         ofn.lpstrTitle        = NULL ;
         ofn.Flags             = 0 ;             // Bei Öffnen bzw. Schließen gesetzt
         ofn.nFileOffset       = 0 ;
         ofn.nFileExtension    = 0 ;
         ofn.lpstrDefExt       = TEXT ("csv") ;
         ofn.lCustData         = 0L ;
         ofn.lpfnHook          = NULL ;
         ofn.lpTemplateName    = NULL ;
    }
    
    BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
    {
         ofn.hwndOwner         = hwnd ;
         ofn.lpstrFile         = pstrFileName ;
         ofn.lpstrFileTitle    = pstrTitleName ;
         ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
    
         return GetOpenFileName (&ofn) ;
    }
    

    [ Dieser Beitrag wurde am 18.01.2003 um 22:54 Uhr von oj0169 editiert. ]



  • Sorry, hat sich erledigt. Meine Vermutung war richtig. Die Felder szFileName, szTitleName waren nicht initialisiert.

    Trotzdem danke!

    Oliver 😃


Anmelden zum Antworten