如何正确使用异常处理IWTH模态对话框

How to properly use exception handling iwth modal dialogs?

本文关键字:IWTH 模态 对话框 异常处理 何正确      更新时间:2023-10-16

我在处理方面有一些歧义:为什么建议我不从对话框上扔掉?

这是我的尝试:

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将不会得到被摧毁,父母不会重新启用。