在使用 MessageDlg 并尝试通过Taskbar close all/group 命令关闭我的应用程序时,我注意到了一个奇怪的行为。
我的申请如下:
- 有一个隐藏的主窗体除了处理一些 Windows 消息并将它们传递到子窗口(如有必要)之外什么都不做。
- 每个子窗口都将其父窗口设置为桌面(以使其显示在任务栏上)。
- 每个孩子都有一个 OnClose 事件,它会弹出一个 MessageDlg 来提示用户是否要保存他们的会话(如果有任何内容已被修改)
问题似乎是它会不断关闭任何未修改的窗口,但是,当它碰到一个已经被修改的窗口时,两件事中的一件会间歇性地发生:
- 无论我是否选择“是/否”,关闭所有进程似乎都会在该特定窗口关闭后停止。
- 对话框不显示,结果是 mrCancel。关闭此窗口后,关闭所有进程再次停止。
我所做的更改是使用 WinAPI MessageBox函数代替 MessageDlg,这似乎确实解决了这个问题。但是,我真的很想知道为什么 MessageDlg 会这样?
我最初的想法是当对话框在 Close All 中间启动时,操作系统可能正在向对话框发送 WM_CLOSE 消息,因为它在技术上是该组的一部分(这可以解释对话框没有出现并且默认为 mrCancel,因为这个相当于按 X)。但是,这并不能解释为什么在我关闭对话框后,关闭所有进程不会继续关闭组中的任何其他窗口!
对此有什么想法/想法吗?