何时调用PostQuitMessage

时间:2011-08-16 20:08:45

标签: c++ c winapi application-close

与许多应用程序一样,我创建了多个窗口。我不知道也无法跟踪已经创建了多少个窗口,所以我不知道什么时候没有。

我的问题是,当所有窗口关闭时,除非我以某种方式调用PostQuitMessage,应用程序将继续运行而不打开窗口(显然)。我无法在消息处理程序中调用PostQuitMessage来响应WM_DESTROY消息,因为当第一个窗口关闭时,它将关闭所有窗口,即使还有其他20个窗口仍然打开。

我的问题是如何知道何时致电PostQuitMessage(0)以实际终止申请?

4 个答案:

答案 0 :(得分:5)

如果由于某种原因,您实际上无法计算应用程序打开的窗口数量,您仍然可以使用EnumThreadWindows(),当没有更多窗口时,您PostQuitMessage()。如果你有多个线程,请确保通过这些线程进行枚举。

来自MSDN

BOOL WINAPI EnumThreadWindows(
  __in  DWORD dwThreadId,
  __in  WNDENUMPROC lpfn,
  __in  LPARAM lParam
);

答案 1 :(得分:4)

只需保留一个静态变量,其中包含打开窗口数的计数。当窗户打开时,它会增加计数器;在WM_DESTROY处理程序中减少它。当计数变为零时,请调用PostQuitMessage。

答案 2 :(得分:1)

当然,唯一干净的方法是跟踪你的窗户,如果没有剩下的话就发布quitmessage。

可能的解决方法是使用其中一个窗口枚举函数。你可以使用EnumWindows()调用你的窗口,它调用一个回调,你可以计算所有的顶层窗口。如果它达到零,则调用PostQuitMessage()。

答案 3 :(得分:0)

窗口数量的静态变量? 我从未见过这样的节目。 一个人的儿童窗户可以在一生中打开和关闭 应用。 另一方面主窗口程序必须关闭应用程序, 如果用户关闭主窗口。 为此,我们必须在WM_DESTROY分支中添加PostQuitMessage(0) 主窗口程序。在此消息之后,GetMessage()返回0和 消息循环因此结束(并且应用程序也结束)