参考1:http://blog.csdn.net/oldmtn/article/details/6904697
参考2:http://bbs.csdn.net/topics/390405810
VC中C++类封装了窗口句柄。
C++通常是在析构函数删除动态分配的内存。
而窗口A是在OnDestroy里面删除自己所有的子窗口。
我们不能一会这里删除子窗口,一会那里删除C++类分配的内存,这样太零乱,不易维护和理解。
又因为C++类和窗口句柄被绑定到了一起,不能说这个窗口已经Destory了,但是C++成员变量分配的内存还存在;
也不能说,成员变量分配的内存还在,但是窗口句柄却不存在。这2种可能性都是没有意义的。
因此我们需要一个统一的方法确保窗口被Destroy的话,同时窗口成员变量也不存在。。。
所以我们需要如下的定义:
假设一个CTestWnd派生于CWnd,其作为其他窗口的子窗口。
一般而言,当我们封装该CTestWnd的时候,最好重载其PostNcDestroy函数,这里调用delete this;在窗口被删除后使用delete触发析构函数,
删除C++对象。
这里是对于我们自己封装的窗口类。
但是对于CTestWnd的父窗口,我们只要在其:OnDestroy里面依次调用各个子窗口(CTestWnd)的DestroyWindow函数就可以了。。