WM_DESTROY & WM_NCDESTROY

 

The WM_NCDESTROY message is sent after the child windows have been destroyed. In contrast, WM_DESTROY is sent before the child windows are destroyed.

 

通过spy++抓取消息也发现,窗口接受到的最后消息是WM_DESTROY 和 WM_NCDESTROY.

截图我就不上传了.日志中弄个图太麻烦了.

 

所以在WM_NCDESTROY消息到达后,销毁窗口类是最好的时机了.

MFC中CWnd的OnNcDestroy()函数中主要做了以下几件事(OLE Wnd不管):

1. cleanup main and active windows.这些信息主要保存在WinThread中.至于CWinThread后续再研究.

在此过程中,如果是主线程的话,会AfxPostQuitMessage(0);向主线程发送WM_QUIT消息退出主消息循环.

2. cleanup tooltip support. 如果你的窗口支持ToolTip的话,那肯定要delete tool tip 对吧.

3. call default, unsubclass, and detach from the map. 还原回原来的默认处理函数,Dettach Wnd.从HWnd Map中去除.

4. 最好一步,给外部一个可以处理后事的机会.调用虚函数PostNcDestroy().

 

CWnd在PostNcDestroy()中啥事也没有做.CDialog也并没有重载PostNcDestroy().

而如果是自己负责自己生命周期的窗口类的话,delete掉自己的最好机会莫过于在PostNcDestroy()中delete掉自己了.

而在PostNcDestroy()中delete掉自己的窗口类就要书CFrameWnd和CView

 

所以,当在设计重载控件的时候,注意一下你要设计的窗口类是自己管理生命周期的呢? 还是有其他类来管理.

 

over

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值