【问题标题】:Why is there a difference in the order WM_DESTROY is received between child and owned windows?为什么子窗口和拥有窗口之间接收 WM_DESTROY 的顺序不同?
【发布时间】:2016-07-19 02:59:09
【问题描述】:

对于子窗口,父窗口首先收到WM_DESTROY,然后是子窗口。拥有自有窗户则相反。拥有的窗口首先收到WM_DESTROY,然后是所有者。如果我想修改一些会影响子窗口的东西,我可以在父窗口的WM_DESTROY 中进行,但我不能对拥有的窗口进行相同的操作。拥有的窗口将在拥有者之前收到WM_DESTROY

【问题讨论】:

标签: c winapi


【解决方案1】:

official documentation for DestroyWindow() 另有说明:

如果指定的窗口是父窗口或所有者窗口,DestroyWindow 在销毁父窗口或所有者窗口时会自动销毁关联的子窗口或拥有的窗口。该函数首先销毁子窗口或拥有的窗口,然后销毁父窗口或所有者窗口。

您是手动发送WM_DESTROY 而不是拨打DestroyWindow()

【讨论】:

  • 我不会发送WM_DESTROY。我写了一个测试程序,对于子窗口,它与文档所说的相反。父窗口后,子窗口收到WM_DESTROY
  • @Rm32a: 啊,this other answer 包含密钥:WM_NCDESTROY 按实际销毁顺序发送,WM_DESTROY 在检查和销毁子窗口之前提前发送。跨度>
  • 给出的答案似乎是您问题的正确答案。如果您将 WM_DESTROY 发送到一个窗口(通过 SendMessage、PostMessage 或 DestroyWindow),则操作系统随后将向其子窗口发送 WM_DESTROY 和 WM_NCDESTROY,如果它不是首先发送到的,那么操作系统如何知道子窗口需要获取此消息父母?也许我误解了你的问题。
  • @clarasoft-it:不,不要将WM_DESTROY发送到窗口。 DestroyWindow 发送 WM_DESTROYWM_NCDESTROY 并实际执行销毁。见blogs.msdn.microsoft.com/oldnewthing/20110926-00
  • 有趣的链接,谢谢。我将对此进行更深入的探索。
猜你喜欢
  • 2014-05-27
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2010-09-18
  • 2010-12-15
  • 2013-07-17
  • 1970-01-01
相关资源
最近更新 更多