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 mitDialogBox(((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 ENDund 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 stehtDialogBox(((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