MFC的窗口对象包含两个部分:封装的窗口对象和C++对象,其删除顺序:先窗口对象(WM_DESTROY(OnDestory()))然后C++对象(WM_NCDESTROY(OnNcDestroy()))
源码分析如下:
删除窗口对象
void CWnd::OnDestroy()
{
.............
// Active Accessibility
if (m_pProxy != NULL)
m_pProxy->SetServer(NULL, NULL);
if (m_pStdObject != NULL)
m_pStdObject->Release();
..............
Default();
}
删除C++窗口对象(一般窗口C++对象MFC都已经封装好,不需要手动释放)
delete调用对象的析构函数
void CWnd::OnNcDestroy()
{
// cleanup main and active windows
CWinThread* pThread = AfxGetThread();
if (pThread != NULL)
{
if (pThread->m_pMainWnd == this)
{
if (!afxContextIsDLL)
{
// shut down current thread if possible
if (pThread != AfxGetApp() || Afx