Common Dialog Boxes



  • Hallo!

    Ich beginne gerade mit Common Dialogboxes zu arbeiten und habe schon einen ChooseColor - Dialog erschaffen.

    Ich habe jetzt aber ein Problem bei GetOpenFileName - Dialog. Das Programm stürtzt beim öffnen dieses Dialoges einfach ab!

    Hier ist der Quellcode:

    OPENFILENAME ofn;
                TCHAR szFileName[MAX_PATH]=TEXT("asdf");
                TCHAR szTitleName[MAX_PATH]=TEXT("Hallo");
                TCHAR szFilter[]=TEXT ("Alle Dateien (*.*)\0*.*\0\0");
    
                ofn.lStructSize=sizeof(OPENFILENAME);
                ofn.hwndOwner=hWnd;
                ofn.hInstance=g_hInst;
                ofn.lpstrFilter=szFilter;
                ofn.lpstrCustomFilter=NULL;
                ofn.nMaxCustFilter=0;
                ofn.nFilterIndex=0;
                ofn.lpstrInitialDir=NULL;
                ofn.nFileOffset=0;
                ofn.nFileExtension=0;
                ofn.lpstrDefExt=TEXT("txt");
                ofn.lCustData=0L;
                ofn.lpfnHook=NULL;
                ofn.nFileOffset=0;
                ofn.lpTemplateName=NULL;
                ofn.nMaxFile=MAX_PATH;
                ofn.lpstrFile=szFileName;
                ofn.nMaxFileTitle=MAX_PATH;
                ofn.lpstrFileTitle=szTitleName;
                ofn.Flags=OFN_CREATEPROMPT;
    
                GetOpenFileName(&ofn);
    
                /*CHOOSECOLOR cc;
                COLORREF crCustColors[16], UserColor;
    
                cc.lStructSize=sizeof(CHOOSECOLOR);
                cc.hwndOwner=hWnd;
                cc.hInstance=(HWND)g_hInst;
                cc.rgbResult=RGB(0x80, 0x80, 0x80);
                cc.lpCustColors=crCustColors;
                cc.Flags=CC_RGBINIT|CC_FULLOPEN;
                cc.lCustData=0;
                cc.lpfnHook=NULL;
                cc.lpTemplateName=NULL;
    
                ChooseColor(&cc);*/
    

    Danke im Voraus.



  • Manche (eigentlich fast alle) Strukturen unter Windows verlangen, das sie vor erster Benutzung mit NULL initialisiert werden!

    Also versuch mal vor Benutzung:

    ZeroMemory(&ofn, sizeof(ofn));
    


  • Danke!

    Jetzt funktionieren auch die anderen!



  • Original erstellt von <Jürgen>:
    *```cpp
    TCHAR szFilter[]=TEXT ("Alle Dateien (.)\0
    .*\0\0");

    Du weißt, dass du dem String szFilter 3 Mal \0 anhängst? Zwei Null-Zeichen reichen eigentlich.



  • Hallo!

    Ich glaube, dass ich 3 '\0' brauch dafür brauche.

    Dieser szFilter ist ja ein Array aus mehreren hintereinanderliegenden mit '\0' terminierten Stringes! Jeder String wird mit '\0' terminiert!
    Jetzt muss der Common File Dialog nicht nur wissen wann jeder einzelne String aus ist, sondern auch wenn das Ende des Arrays erreicht ist! Dies kennzeichnet man, indem man nach dem letzten String der mit '\0' terminiert ist noch ein '\0' anhängt! Das ist sozusagen der Abschuss des ganzen.
    Zwei '\0' hintereinander bedeuten also das dieses Array aus hintereinanderliegenden Strings aus sind.



  • Zwei '\0' hintereinander bedeuten also das dieses Array aus hintereinanderliegenden Strings aus sind.

    Und warum machst du dann 3? Wenn du den String in " " machst wird der automatisch 0 terminiert. Also hast du \0\0\0



  • Ich habe vergessen, dass eine Text der zwischen "" steht automatisch terminiert wird! sorry_.


Anmelden zum Antworten