Mfc 如何销毁窗口并重新创建它?

Mfc 如何销毁窗口并重新创建它?,mfc,Mfc,我已经创建了一个窗口 当我这么做的时候 w->Create (...); w->DestroyWindow (); w->Create (...); 程序崩溃了 有人能帮忙吗?我们对您的MFC窗口类了解不够。如果它是从CFrameWnd或CView派生的,它将崩溃。这是因为在这些窗口被销毁后,它们的C++内存指针(这个)不再有效。它指向一个内存区域,它被C++内存分配器释放了。试图取消对它的引用将导致崩溃。因为,在PostNcDestroy()重写中,CFrameWnd和CV

我已经创建了一个窗口 当我这么做的时候

w->Create (...);
w->DestroyWindow ();
w->Create (...);
程序崩溃了
有人能帮忙吗?

我们对您的MFC窗口类了解不够。如果它是从CFrameWnd或CView派生的,它将崩溃。这是因为在这些窗口被销毁后,它们的C++内存指针(这个)不再有效。它指向一个内存区域,它被C++内存分配器释放了。试图取消对它的引用将导致崩溃。因为,在PostNcDestroy()重写中,CFrameWnd和CView类调用“delete this”

由于我们不知道您的
DESTROY窗口
是如何实现的,或者您的
WM_DESTROY
WM_NCDESTROY
处理程序中有什么内容,因此我们无法提供太多帮助,除了显而易见的:学习如何使用调试器。
void CFrameWnd::PostNcDestroy()
{
    // default for frame windows is to allocate them on the heap
    //  the default post-cleanup is to 'delete this'.
    // never explicitly call 'delete' on a CFrameWnd, use DestroyWindow instead
    delete this;
}

void CView::PostNcDestroy()
{
    // default for views is to allocate them on the heap
    //  the default post-cleanup is to 'delete this'.
    //  never explicitly call 'delete' on a view
    delete this;
}