MessageDlgを使用していて、タスクバーのclose all / groupコマンドを使用してアプリケーションを閉じようとすると、奇妙な動作に気づきました。
私のアプリケーションは次のとおりです。
- 一部のWindowsメッセージを処理し、それらを子ウィンドウに渡す以外に何もしない非表示のメインフォームがあります(必要な場合)。
- 各子ウィンドウの親はデスクトップに設定されています(タスクバーに表示するため)。
- 各子にはOnCloseイベントがあり、MessageDlgをポップアップして、セッションを保存するかどうかをユーザーに確認します(コンテンツが変更されている場合)。
問題は、変更されていないウィンドウを継続的に閉じることであるようですが、変更されたウィンドウにヒットすると、2つの事柄のうちの1つが断続的に発生します。
- 「はい/いいえ」を選択しても、特定のウィンドウを閉じた後、すべて閉じるプロセスが停止するようです。
- ダイアログは表示されず、mrCancelが結果になります。このウィンドウが閉じられた後、再びすべてのプロセスを閉じます。
私が行った変更は、MessageDlgの代わりにWinAPI MessageBox関数を使用することでしたが、これで問題が解決したようです。しかし、なぜMessageDlgがこのように動作しているのか知りたいのですが。
私の最初の考えは、ダイアログが閉じる途中で起動されているときでした。おそらく、OSは技術的にグループの一部であるため、ダイアログにWM_CLOSEメッセージを送信しています(これは、ダイアログが表示されず、デフォルトでmrCancelになっていることを説明します。 Xを押すのと同じです)。ただし、ダイアログを閉じた後、[すべて閉じる]プロセスがグループ内の他のウィンドウを閉じ続けない理由は説明されていません。
これについて何か考え/アイデアはありますか?