【问题标题】:Win32 Application is not destroyedWin32 应用程序未销毁
【发布时间】:2015-10-31 14:28:40
【问题描述】:

我正在学习 Win32 API。我有一个问题,窗口明显关闭,但应用程序在后台运行(我可以使用 Windows 10 任务管理器看到这一点)。这是我关闭窗口的代码:

case WM_CLOSE:
    DestroyWindow(hwnd);
break;

case WM_DESTROY:
    PostQuitMessage(0);
break;

我的应用程序名为 a.exe,您可以在我截取的 Windows 10 任务管理器屏幕截图中看到它。

【问题讨论】:

  • 你从窗口过程(12)返回什么?真正有用的是MCVE
  • 原来是控制台出了点问题。如果控制台没有关闭并且我正在运行 FreeConsole(),它不会关闭应用程序。我现在也关闭控制台并且它正在工作。不过谢谢!

标签: c++ winapi


【解决方案1】:

阅读docs

"PostQuitMessage 函数将 WM_QUIT 消息发送到线程的消息队列并立即返回;该函数只是向系统指示线程正在请求在未来某个时间退出。 当线程从其消息队列中检索到 WM_QUIT 消息时,它应该退出其消息循环并将控制权返回给系统。返回给系统的退出值必须是WM_QUIT消息的wParam参数。

WM_QUIT 消息与窗口无关,因此永远不会通过窗口的窗口过程接收。它只能由 GetMessage 或 PeekMessage 函数检索。"

另请参阅link

【讨论】:

  • 原来是控制台出了点问题。如果控制台没有关闭并且我正在运行 FreeConsole(),它不会关闭应用程序。我现在也关闭控制台并且它正在工作。不过谢谢!
  • @Hyden 使用有关控制台的信息更新您的问题,然后发布您自己的答案。
  • @MarkRansom 好的,谢谢。我已通过明确标记的编辑更新了我的问题,并在下面发布了答案。
  • @Hyden:您的问题没有显示分配控制台的代码。这是您问题的重要细节。正如发布的那样,这个问题对于可能有同样问题的未来访问者来说并不是真的有用。他们甚至可能不知道他们有同样的问题,因为问题缺乏重要的细节。
【解决方案2】:

我发现了这个问题。感谢所有帮助,但窗口实际上已关闭,但控制台仍在后台打开。我在跑步:

FreeConsole();

那是隐藏控制台。当我关闭窗口时,控制台继续运行,我现在也关闭控制台并且它可以工作。

【讨论】:

  • 控制台不应对您的程序退出能力有任何影响。一定有别的事情发生。但无论如何,调用FreeConsole 通常表明您应该构建一个 GUI 应用程序 (/SUBSYSTEM:Windows) 而不是控制台应用程序 (/SUBSYSTEM:Console)。
  • 抱歉,不是很清楚。我的意思是 FreeConsole() 隐藏了控制台,当我关闭窗口时,控制台继续在后台运行。控制台是任务管理器中显示的内容,我已经删除了 FreeConsole(),现在我可以关闭控制台并且任务管理器中没有任何内容。
猜你喜欢
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
相关资源
最近更新 更多