Visual c++ 关闭子窗口时避免MessageBox

Visual c++ 关闭子窗口时避免MessageBox,visual-c++,mfc,mdichild,Visual C++,Mfc,Mdichild,我有一个派生自CFormView的子窗口。在OnCreate()函数中的特定条件下,我想关闭此窗口 我尝试了两种选择: int CFilterWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFormView::OnCreate(lpCreateStruct) == -1) return -1; //Trial-1 if (!IsInitialized()) { DestroyWindow(); ret

我有一个派生自
CFormView
的子窗口。在
OnCreate()
函数中的特定条件下,我想关闭此窗口

我尝试了两种选择:

int CFilterWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFormView::OnCreate(lpCreateStruct) == -1)
    return -1;

//Trial-1
if (!IsInitialized())
{
    DestroyWindow();
    return 0;
}
//Trial-2
if (!IsInitialized())
{
    return -1;
}

return 0;
}
在这两种情况下,窗口都关闭,但我的系统返回“未能创建空文档”。


如何避免此消息?

这是完全正常的行为

文档、框架和视图一次创建。首先创建文档,然后创建框架和内部视图。如果其中一个操作失败,所有其他操作也将回滚并失败

因此,在MDI OnFileNew的情况下,从模板调用OpenDocumentFile。 此函数用于创建新的CDocument,然后创建一个新的框架窗口。框架窗口创建视图。由于您的代码,此操作失败

您的错误消息来自CMultiDocTemplate::OpenDocumentFile,因为CreateNewFrame失败


让MFC创建您的窗口并在OnInitialUpdate中销毁视图。在没有此消息的情况下,这应该可以工作。

使用Debug+Break All并查看“调用堆栈调试器”窗口以了解您是如何做到这一点的。这是代码中的一个文档/视图编程缺陷。您创建了一个文档,但当MFC尝试为其创建视图时,您说“您不能查看它”。你应该早点停止,不允许先创建文档。你能告诉我应该怎么做吗?我创建了文档,然后我正在创建视图,但由于某些条件,在OnCreate()函数中关闭了相同的视图。在OnIniialUpdate函数中执行相同操作后,我遇到了崩溃。崩溃位于无效的CFrameWnd::initialUpdateName(CDocument*pDoc,BOOL bMakeVisible)函数中,该函数触发消息WM_INITIALUPDATE,用于InInitialUpdate和以后调用ActivateFrame()函数。我想当我销毁窗口时,它会尝试对视图指针执行一些操作,而视图指针在销毁窗口()之后是垃圾。我也尝试过使用CloseWindow()和WM_destroy message,但结果相同……除了在视图中发布一条私人WM_应用消息,我看不到其他机会。当您收到ist时,请使用DestroyWindw。切勿将WM_DESTROY作为信息发布或发送。它是内部的。