2

私のプログラムはモードレス ダイアログを使用してユーザーと対話し、トレイ アイコンも備えています。ユーザーは、トレイ アイコンを使用してアプリをすぐに終了できます。

BOOL OnInitDialog()
{
    init data...
}

void OnDestroy()
{
    destroy data...
}

void OnSomeButton()
{
    CFileDialog dlg;
    ...
    dlg.DoModal(m_hWnd));
    access data...
    ...
}

void OnMenuExit()
{
    DestroyWindow();
}

問題は、モーダル ダイアログ ( ) をポップアップOnSomeButtonし、トレイ アイコン メニューを使用して終了すると、メイン ダイアログが最初に破棄され、次にモーダル ダイアログが返され、無効なデータにアクセスしようとしてクラッシュすることです。

データにアクセスする前にチェックコードを追加できることはわかっていますが、他に方法はありますか? ウィンドウが破棄される前に OnSomeButton() が返されるようにする方法はありますか?

4

2 に答える 2

3

独自のアプリケーション レベルのコードを追加する必要があります。この問題に対するシステム サポートはありません。主な理由は、非常に多くの特殊性があり、一般的なアプローチが不可能なためです。

于 2012-08-13T02:46:56.417 に答える
2

うん。トレイ メニューを終了するときに、WM_CLOSEまたは同様のメッセージをモーダル ダイアログに送信して終了させることができます。それが戻る前にメイン ウィンドウが破棄されOnSomeButtonたとしても、その関数の残りの部分がクラス内部 (メンバー変数など) にアクセスしなければ問題ありません。モーダル ダイアログのウィンドウ プロシージャが、この方法で閉じられたときに「中止」コードまたは何かを返すようにすることで、これを確実にすることができます。

于 2012-08-13T03:04:01.513 に答える