【问题标题】:In win32 programming, If I create another top level window, do I need a separate window procedure for it?在win32编程中,如果我创建另一个顶级窗口,我需要一个单独的窗口过程吗?
【发布时间】:2013-08-10 20:26:15
【问题描述】:

我在创建多个顶级窗口(除了主窗口)的应用程序中遇到了问题:

问题是,如果我关闭任何顶级窗口,我的主窗口也会关闭。我花了几天时间才明​​白发生了什么,我想我明白了。看起来其他顶级窗口使用与我的主窗口相同的窗口过程,因此当我关闭任何顶级窗口时,窗口过程会收到 WM_CLOSE 消息并关闭整个应用程序。

因此我有一个问题——如果我创建一个新的顶级窗口,我是否需要注册一个新类并为其关联一个新的窗口过程?

【问题讨论】:

  • 不需要单独的过程。您可以采取的一种有效的故障排除措施是运行 Spy++ 工具并检查您的其他窗口究竟收到了哪些消息,这些消息会使其他窗口在您不期望的时候关闭。
  • @RomanR。谢谢,我马上试试。但是有一个问题 - 如果我没有为我的新窗口指定一个新的窗口过程,是否会使用主窗口的过程?
  • CreateWindow 将类名作为参数,并且 class/WNDCLASS 附加了一个 lpfnWndProc - 这是 window proc 的来源。它是否已被另一个窗口使用并不重要。

标签: winapi


【解决方案1】:

您的窗口进程大概是通过调用 PostQuitMessage 来响应 WM_DESTROY。这会降低流程。您应该只在主窗口关闭时调用 PostQuitMessage。只要您使用处理 WM_DESTROY 消息的窗口句柄进行区分,就可以从共享窗口过程中执行此操作。

【讨论】:

  • 就是这样! WM_DESTROY 正在调用 PostQuitMessage,这使得整个应用程序退出。我使 PostQuitMessage 有条件,现在我的应用程序可以工作了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多