我有一个多线程应用程序,可能会显示一个MessageBox供用户交互。消息框本身是在工作线程中显示的,在用户从应用程序系统托盘图标选择上下文菜单命令后显示,因此用户在消息框显示时可以继续使用应用程序。这很好用,直到用户发出“退出”命令为止,此时我需要找到一种方法来关闭任何打开的消息框。
我做了功课,并能够使用此方法(使用此方法)获取消息框的主要(对话框)窗口的HWND句柄。我使用Spy++检查了HWND是否正确,所以HWND本身不是问题所在。问题在于,当我从另一个线程向消息框发送
有没有办法根据其窗口句柄关闭消息框?
我做了功课,并能够使用此方法(使用此方法)获取消息框的主要(对话框)窗口的HWND句柄。我使用Spy++检查了HWND是否正确,所以HWND本身不是问题所在。问题在于,当我从另一个线程向消息框发送
PostMessage(hMsgBoxWnd, WM_CLOSE, 0, 0);
时,它简单地忽略此消息并不关闭。有没有办法根据其窗口句柄关闭消息框?
PostMessage(hMsgBoxWnd, WM_COMMAND, MAKEWPARAM(IDCANCEL, BN_CLICKED), 0);
)。 - Jonathan PotterMessageBox()
使用调用它的线程的消息队列。在内部,MessageBox()
运行自己的消息循环,因为它是一个模态对话框。在某些情况下,MessageBox()
简单地不响应WM_CLOSE
:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/18be2271-d7ec-4fee-9960-e90a4cb91758 - Remy Lebeau