私はモデルのダイアログを表示してユーザーが何かをするのを待つ機能を持っていますが、それは複雑で何かが間違っている可能性があり、この場合例外がスローされます。ここで モーダルダイアログから例外をスローする最良の方法は何ですか?
は、例外処理でこの関数を呼び出すことが想定コードを次のとおりです。try {
CMyDialog mydialog();
mydialog.DoModal();
}
catch(std::logic_error &e){
DoExceptionHandling();
}
ダイアログUIがATLで書かれた、と私たちは次のようにボタンのOnClickハンドラがあるとしましょうされています
LRESULT CMyDialog::OnBnClickedBlah(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/){
...
throw std::logic_error("BlahBlah");
}
は、
しかし、上記のコードを実行すると、例外がスローされると、デバッグモードで、ダイアログのHWNDがヌルであると主張するATLアサーションがトリガされました(ただし、実際にはまだクリアされません)。
私が知りたいのは、この問題を解決し、呼び出し元が例外を捕捉でき、すべてのリソースが適切に解放されていることを確認することです。
あなたのアドバイスは良いです。しかし私はここで私の動機を説明したい。 'DoModal'への呼び出しは、通常のGUIレスの関数呼び出しのように構文的に見えます。なぜなら、実行フローが終了するまで実行フローをブロックするからです。実装は実際には全く異なるが、なぜ同じにすることができないのか理解していますか? 1つの解決策は、ダイアログオブジェクトの作成と 'DoModal'メソッドを1つの関数にカプセル化し、あなたのアドバイスを適用することです。 –