gpt4 book ai didi

c++ - Windows MessageBox 忽略 WM_CLOSE

转载 作者:可可西里 更新时间:2023-11-01 09:25:07 25 4
gpt4 key购买 nike

我们有一个遗留的 C Windows 应用程序,它在发生致命连接错误时通过 MessageBox 调用弹出一个模式窗口。我们的网络工程师可能同时运行其中的许多应用程序。有时,网络故障会导致这些应用程序处理的连接同时失败。

在 Windows 7 上,从任务栏中选择“关闭所有窗口”功能确实有效,因为模态对话框似乎没有处理 WM_QUIT 消息。我通常在 Linux 系统上工作,但我的 MSDN 研究表明,我可以捕获和处理此消息的唯一方法是创建我自己的对话框并自行处理消息。

我担心的是我忽略了一个更简单的解决方案,任何人都可以提供替代方案吗?

最佳答案

模态对话的消息循环应该捕获 WM_QUIT 并作为响应调用 EndDialog() 并将 WM_QUIT 消息传递给应用程序的使用 PostMessage() 的主窗口。


更新:

如果将 WM_QUIT 发送到模态对话,上面提出的方法会起作用……但至少在我当前的 win7 机器上不是这种情况。

此外,主窗口接收到 WM_SYSCOMMANDwParam 设置为 SC_CLOSE 并且默认消息处理程序会以某种方式忽略它(这可能是由于模态对话框的样式......?我没有进一步调查。)。

但是,将以下分支添加到 ma​​in 窗口的消息循环的 switch 应该完成在 OP 描述的条件下结束应用程序的工作:

  ...

case WM_SYSCOMMAND:
if (SC_CLOSE == wParam)
{
PostQuitMessage(<whatever code shall be returned>);
}

return DefWindowProc(...);

...

关于c++ - Windows MessageBox 忽略 WM_CLOSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17427103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com