Problem mit Dialogprozeduren
-
Ich entwickle eine Anwendung die ein Menu mit Eintraegen hat wie z.B. File -> Connect und Extras -> Send mail. Fuer jeden dieser Eintraege wollte ich einen eigenen Dialog haben mit verschiedenen Steuerelementen. Mein Problem ist das die Kommunikation mit dem einen Dialog problemlos verlauft mit dem anderen Dialog aber die Anwendung einfriert. Fuer jeden Dialog habe ich auche eine callback Funktion. Die Implementierung ist auch fast identisch deshalb kann ich mir nicht erklaeren wo der fehler liegen konnte.
BOOL CALLBACK MsgDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: InitDialog(hwnd); return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: EndDialog(hwnd, IDOK); break; } break; default: return FALSE; } return TRUE; } BOOL CALLBACK ConDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_CONNECT_OK: EndDialog(hwnd, 0); break; } break; default: return FALSE; } return TRUE; }In der WndProc werden die Ruckgabewerte so ueberpruft:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg...) { // ... case WM_COMMAND: switch(LOWORD(wParam)) { case ID_EXTRAS_SEND: { int result = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_MSG_DIALOG), hwnd, MsgDlgProc); break; } case ID_FILE_CONNECT: { int res = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_CONNECT), hwnd, ConDlgProc); break; } } break; // ... }Was noch zu erwaehnen ist, ist das wenn ich versuche die Anwendung zu debugen versuche, ein Fenster mit einer Meldung erscheint, dass die msvcr80d.dll nicht finden kann und das eine mogliche Neuinstallation der Anwendung das Problem beheben koennte. Die dll befindet sich allerdings in den winsxs ordner.
Kann mir nicht weiterhelfen, deshalb waehre ich fuer jede Hilfe dankbar.
-
Spongebob234 schrieb:
case ID_EXTRAS_SEND: { int result = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_MSG_DIALOG), hwnd, MsgDlgProc); break; } case ID_FILE_CONNECT: { int res = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG_CONNECT), hwnd, ConDlgProc); break; }Ok und für was ist "result " und "res" gut, du erzeugst die Variablen innerhalb einer Klammer und weg sind die dann?
Friert deine Anwendung nun ein wenn eine der Dialogboxen aufgeht, oder wenn die Dialogbox zurückkehrt? Wenn sie einfriert beim öffnen der Dialogbox, dann steckt der Fehler in deiner Dialogbox, wenn nicht dann liegt er wohl dahinter.
-
Nachtrag:
Wenn das mit dem Debugen nicht klappt, kannst du auch einfach mal an markannten Stellen im Code eine MessageBox mit verschiedenen Inhalten aufrufen. Irgendwann wird eine Messagebox erreicht nach der es nicht weitergeht, zwischen dieser und der nächsten nicht mehr angezeigten liegt dann offensichtlich dein Fehler.