2016-07-18 114 views
0

父窗口首先收到WM_DESTROY然后是子窗口。与拥有的窗户相反。拥有的窗口首先收到WM_DESTROY,然后是所有者。如果我想修改会影响子窗口的内容,我可以在父窗口的WM_DESTROY中执行,但我无法对拥有的窗口执行相同的操作。在拥有者之前,拥有的窗户将收到WM_DESTROY为什么在子窗口和拥有的窗口之间收到WM_DESTROY命令的差异?

+1

[WM_DESTROY和WM_NCDESTROY的区别是什么?](https://blogs.msdn.microsoft.com/oldnewthing/20050726-00/?p=34803) – IInspectable

回答

0

official documentation for DestroyWindow()否则说:

如果指定的窗口是父母或所有者窗口,DestroyWindow当它破坏了父母或所有者窗口自动销毁相关的儿童或拥有的窗口。该函数首先销毁子窗口或拥有的窗口,然后销毁父窗口或所有者窗口。

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

+0

我没有发送'WM_DESTROY'。我写了一个测试程序,对于子窗口来说,它与文档所说的相反。子窗口收到父母之后的'WM_DESTROY' – Mike32ab

+0

@ Rm32a:Ahh,[this other answer](http://stackoverflow.com/a/3155879/103167)包含密钥:'WM_NCDESTROY'按实际销毁顺序发送,在检查和破坏子窗口之前,会提前发送WM_DESTROY。 –

+0

给出的答案似乎是你的问题的正确答案。如果你发送WM_DESTROY到一个窗口(通过SendMessage,PostMessage或DestroyWindow),操作系统会发送WM_DESTROY和WM_NCDESTROY给它的子节点,如果没有首先发送到子窗口,操作系统会如何知道子窗口需要得到这个消息父母?也许我误解了你的问题。 –