Dialog bringt Programm zum abstürzen



  • hi,
    diesmal hab ich ein Problem mit Dialogen und hoffe wiedermal auf eure Hilfe.
    Ich hab ein Programm 100% aus einem Buch abgeschrieben ab es funktioniert nicht, das heißt wenn ich auf den Menüeintrag klicke nachdem der Dialog aufgerufen werden soll ist mein fenster nach noch nicht einer Sekunde weg.
    Es handelt sich dabei um ein älteres Buch daher hoffe ich das trotzdem jemand den Fehler findet. Der Debugger "sagt" das irgendwas mit

    DialogBox(((LPCREATESTRUCT)lParam)->hInstance, TEXT("IDD_ABOUTBOX"),hWnd,AboutDlgProc);
    

    nicht stimmt. die Resourcen Datei sieht so aus:

    IDD_ABOUTBOX DIALOG   22, 17, 230, 75
    STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
    CAPTION "Info"
    FONT 8, "System"
    BEGIN
        ICON            IDI_FIRSTDIALOG,IDC_MYICON,14,9,16,16
        LTEXT           "FirstDialog, Version 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX
        LTEXT           "Copyright (C) 2007",IDC_STATIC,49,20,119,8
        DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
    END
    

    und resource.h:

    #define IDS_APP_TITLE			103
    
    #define IDR_MAINFRAME			128
    #define IDD_FIRSTDIALOG_DIALOG	102
    #define IDD_ABOUTBOX			103
    #define IDM_ABOUT				104
    #define IDM_EXIT				105
    #define IDI_FIRSTDIALOG			107
    #define IDI_SMALL				108
    #define IDC_FIRSTDIALOG			109
    #define IDC_MYICON				2
    #ifndef IDC_STATIC
    #define IDC_STATIC				-1
    #endif
    // Nächste Standardwerte für neue Objekte
    // 
    #define IDM_APP_ABOUT 40001
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    
    #define _APS_NO_MFC					130
    #define _APS_NEXT_RESOURCE_VALUE	129
    #define _APS_NEXT_COMMAND_VALUE		32771
    #define _APS_NEXT_CONTROL_VALUE		1000
    #define _APS_NEXT_SYMED_VALUE		110
    #endif
    #endif[cpp]
    


  • Hi,

    diese Zeile:

    DialogBox(((LPCREATESTRUCT)lParam)->hInstance, TEXT("IDD_ABOUTBOX"),hWnd,AboutDlgProc);
    

    kann auch nur unter WM_CREATE funktionieren, da nur da im lParam ein Zeiger auf ein CREATESTRUCT abgelegt ist.
    Des weiteren schreib mal lieber:

    DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,AboutDlgProc);
    

    (Letzteres sollte Dein Problem beheben 😉 .)



  • Vielen Dank das Problem ist gelöst.
    Der fehler liegt auch nicht im Buch, dort steht

    DialogBox(((LPCREATESTRUCT)lParam)->hInstance, TEXT("IDD_ABOUTBOX"),hWnd,AboutDlgProc);
    

    Aber da beschwert sich der Kompiler deshalb hab ich mal (ohne mir große Gedanken zu machen einfach was "ähnliches" was auch WM_CREATE funktionierte reinzusetzen

    mfG noha


Anmelden zum Antworten