Ich habe einige Zweideutigkeiten im Umgang mit Ausnahmen: Warum wurde mir empfohlen, nicht aus einem Dialogfeld zu werfen?Wie kann die Ausnahmebehandlung mit modalen Dialogen richtig gehandhabt werden?
Hier ist mein Versuch:
In wndproc
etwas wie folgt aus:
case WM_COMMAND:
switch(LOWORD(wparam)){
case IDD_ABOUT:{
try{
int ret = DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
if(ret == IDOK)
MessageBox(hwnd, "Dialog exited with IDOK.", "Notice",MB_OK | MB_ICONINFORMATION);
else
if(ret == IDCANCEL)
MessageBox(hwnd, "Dialog exited with IDCANCEL.", "Notice",MB_OK | MB_ICONINFORMATION);
else
if(ret == -1)
MessageBox(hwnd, "Dialog failed!", "Error",MB_OK | MB_ICONINFORMATION);
}
catch(char *pError){
MessageBox(NULL,pError,"Error",MB_OK);
// EndDialog(hwnd, IDOK);
}
catch(...){
MessageBox(NULL,"Something went wrong!","Error",MB_OK);
// EndDialog(hwnd, IDOK);
}
}
break;
case ID_EXIT:
DestroyWindow(hwnd);
break;
}
break;
Und in meinem modalen Dialogprozedur ich, wenn sich defekte Eingang werfen, wenn die Taste Eingabe erhalten klicken:
// In AboutDlgProc:
//...
case IDOK:
GetInputFromEditBox; // creating buffer and reading text and blahblah
if(not_good_input)
throw "Bad input"; //
Ich weiß, eine leistungsfähigere Handhabung zu verwenden ist, die Hierarchien zu verwenden und von std::exception
zu erben ... Aber hier nur für die Praxis.
- Ist das wie soll ich werfen? Oder sollte ich es anders machen? Soll die Zeilen oben kommentiert werden?
// EndDialog(hwnd, IDOK);
?
Vielen Dank.
Ihr Code sieht gut aus. Es wurde Ihnen wahrscheinlich empfohlen, das Dialogfeld nicht zu überspringen, da Sie KEINE Ausnahmen von Ihrem Code zurück in den MS-Windows-Code, der Ihren wndproc aufgerufen hat, machen dürfen. Der MS-Windows-Code ist "C" und weiß nicht, was man mit C++ - Ausnahmen, Stackabwickeln usw. machen soll. –
@RichardCritten: Danke. Würde es Ihnen etwas ausmachen, eine Antwort hinzuzufügen? – WonFeiHong
@RichardCritten: Aber Richard ich denke ich werfe aus meiner Dialogbox Prozedur? 'werfen" schlechte Eingabe ";'? – WonFeiHong