关闭子窗口时避免使用MessageBox

时间:2014-06-20 09:39:38

标签: visual-c++ mfc mdichild

我有一个源自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;
}

在这两种情况下,窗口都已关闭,但我的系统返回"Failed to create empty document."

如何避免此消息?

1 个答案:

答案 0 :(得分:0)

这是一种完全正常的行为。

文档,框架和视图一次创建。首先创建文档,而不是框架和内部视图。如果其中一个操作失败,则所有其他操作也会回滚并失败。

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

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

让MFC创建窗口并在OnInitialUpdate中销毁它的视图。这应该没有这个消息。