Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 何时调用PostQuitMessage_C++_C_Winapi_Application Close - Fatal编程技术网

C++ 何时调用PostQuitMessage

C++ 何时调用PostQuitMessage,c++,c,winapi,application-close,C++,C,Winapi,Application Close,像许多应用程序一样,mine创建多个窗口。我不知道也无法跟踪创建了多少个窗口,所以我不知道什么时候没有 我的问题是,当所有窗口都关闭时,除非我以某种方式调用PostQuitMessage,否则应用程序将在没有打开窗口的情况下继续运行(显然)。我无法在消息处理程序中调用PostQuitMessage,以响应WM_DESTROY消息,因为当第一个窗口关闭时,即使还有二十个窗口仍然打开,也会关闭所有窗口 我的问题是如何知道何时调用PostQuitMessage(0)来实际终止应用程序?只需保留一个静态

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

我的问题是,当所有窗口都关闭时,除非我以某种方式调用
PostQuitMessage
,否则应用程序将在没有打开窗口的情况下继续运行(显然)。我无法在消息处理程序中调用
PostQuitMessage
,以响应
WM_DESTROY
消息,因为当第一个窗口关闭时,即使还有二十个窗口仍然打开,也会关闭所有窗口


我的问题是如何知道何时调用
PostQuitMessage(0)
来实际终止应用程序?

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

如果由于某种原因,您确实无法计算应用程序打开了多少个窗口,您仍然可以使用
EnumThreadWindows()
,当没有更多窗口时,您可以使用
PostQuitMessage()
。如果有多个线程,请确保也枚举了这些线程


当然,唯一干净的方法是跟踪你的窗口,如果没有留下任何窗口,就发布退出消息


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

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

为什么你不能跟踪打开了多少个窗口?@Gabe,因为显然我太傻了,看不出这是多么简单。哇,不知道为什么我没有想到这一点。这是记录现有窗口数量的常用方法吗?@Seth,大多数应用程序都有一个主窗口,即使它们打开了其他窗口,所以不,这并不常见。那么主窗口是否有一个单独的窗口过程?显然,在子窗口使用的wndproc中不能有
PostQuitMessage
。我是win32 GUI编程的新手,请原谅我的无知。
BOOL WINAPI EnumThreadWindows(
  __in  DWORD dwThreadId,
  __in  WNDENUMPROC lpfn,
  __in  LPARAM lParam
);