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;
}