WM_DESTROY 和 WM_NCDESTROY 消息之间有什么区别? (译)

原文链接 What is the difference between WM_DESTROY and WM_NCDESTROY?

在窗口销毁时有两个紧密关联的 windows 消息, 就是 WM_DESTROY 和 WM_NCDESTROY. 它们有何区别?

区别就是 WM_DESTROY 消息是在窗口销毁动作序列中的开始被发送的, 而 WM_NCDESTROY 消息是在结尾. 这在你的窗口拥有子窗口时是个重大区别. 如果你有一个带子窗口的父窗口, 那么消息的发送序列 (在没有怪诞行为影响的前提下) 就像这样:

hwnd = parent, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_DESTROY
hwnd = child, uMsg = WM_NCDESTROY
hwnd = parent, uMsg = WM_NCDESTROY

注意, 父窗口是在子窗口被销毁之前收到 WM_DESTROY 消息, 在子窗口被销毁之后收到 WM_NCDESTROY 消息.

两个销毁消息, 一个在开头, 一个在结尾, 这意味着, 对于你自己的模块, 你可以通过处理相应的消息来执行清理操作. 例如, 如果有些东西必须在开头清理, 那么你可以使用 WM_DESTROY 消息.

WM_NCDESTROY 消息是你窗口将会收到的最后一个消息 (在没有怪诞行为影响的前提下), 因此, 这里是做 "最终清理" 的最佳场所. 这就是为什么我们的 new scratch 程序会一直等到 WM_NCDESTROY 销毁它的实例变量, 才会返回.

与这两个销毁消息配对的, 是 WM_CREATE 和 WM_NCCREATE 这两个类似的消息. 与 WM_NCDESTROY 是你窗口收到的最后一条消息类似, WM_NCCREATE 消息是第一条消息, 这是一个创建你自己的实例变量的好地方. 需要注意的是, 如果你导致 WM_NCCREATE 消息返回失败, 那么所有你将收到的消息就只有 WM_NCDESTROY 了; 不会有 WM_DESTROY 消息了, 因为你根本就没有收到相应的 WM_CREATE 消息.

那么什么是我一直在暗示的 "怪诞行为" 呢? 下一次 (When the normal window destruction messages are thrown for a loop) 我们再说.

 

闻香止步 淘宝 拍拍 有啊 易趣店 收集于:http://www.cppblog.com/free2000fly/archive/2008/01/23/41710.html
常年经营木雕系列产品:
海南黄花梨、越南黄花梨、草花梨、小叶紫檀、黑檀、香榧木、绿檀木、黄杨木 摆件;
紫檀、绿檀木、黄杨木、桃木、漆艺发簪 
木梳 樟木壁挂 佛珠 车饰

收藏送礼佳品,也可联系订做

淘宝店:http://shop36570193.taobao.com
拍拍店:http://421840135.paipai.com/

联系方式:
QQ   421840135
旺旺 xiaobaitucsl
邮件 dahuilangc@foxmail.com

朋友,有空来看看,喜欢的朋友请收藏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值