如何正确使用异常处理IWTH模态对话框
How to properly use exception handling iwth modal dialogs?
我在处理方面有一些歧义:为什么建议我不从对话框上扔掉?
这是我的尝试:
在wndproc
中类似的东西:
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;
,在我的模态对话框过程中,如果单击按钮获取输入时输入不好的话:
// In AboutDlgProc:
//...
case IDOK:
GetInputFromEditBox; // creating buffer and reading text and blahblah
if(not_good_input)
throw "Bad input"; //
我知道使用更强大的处理方法是使用层次结构并从std::exception
继承...但是在这里仅用于练习。
- 这是我应该如何投掷的?还是我应该以其他方式做?上面的未注释线应该吗?
// EndDialog(hwnd, IDOK);
?
谢谢。
除了理查德(Richard)关于堆栈放松的评论外,该对话框中还有一个更根本的问题会产生HWND并停用父窗口,如果您抛出了一个例外,则创建的HWND将不会得到被摧毁,父母不会重新启用。
相关文章:
- 如何在QT中制作模态QProgressDialog?
- 如何让 QInputDialog 更少模态?
- cdhtmldialog-使其模态
- Qt - 创建主窗口前的非模态对话框
- 如何正确使用异常处理IWTH模态对话框
- 如何使用Ifileopendialog打开 *模态 *文件对话框
- 模态qprogressdialog :: setValue()导致嵌套事件循环崩溃
- 捕获新创建的模态对话框的窗口句柄
- 模态形式之上的主形式
- QT在菜单项上显示模态对话框(.UI)单击
- 如何将QMainWindow设置为模态
- Qt中的多模态窗口
- 正在从Script/osx 10.7+/safari/automatior/objective-c中删除模态
- 自动对焦QLineEdit在QDialog与弹出标志和模态在主窗口
- VC6中的多模态对话框
- 当用户尝试激活主窗口时引发模态QDialog
- 如何使非模态对话框始终在应用程序的顶部
- 非模态对话框窗口的良好设计是什么?
- 从通过模态WinForms调用的C++调用IConnectionPointImpl接口时出现问题
- MFC模态对话框的怪异行为