如何在保持文档打开的同时关闭 MFC CVIEW

Posted

技术标签:

【中文标题】如何在保持文档打开的同时关闭 MFC CVIEW【英文标题】:How to close a MFC CVIEW while keeping the document open 【发布时间】:2012-11-09 10:03:52 【问题描述】:

我在 MDI 应用程序中打开了一个 MFC CDocument 和关联的 CView。我想分离并关闭视图(和关联的框架),同时保持文档打开。查看 MFC 代码以了解它是如何工作的,在 CDocument::OnCloseDocument(); 中显示以下内容;

// destroy all frames viewing this document
// the last destroy may destroy us
BOOL bAutoDelete = m_bAutoDelete;
m_bAutoDelete = FALSE;  // don't destroy document while closing views
while (!m_viewList.IsEmpty())

    // get frame attached to the view
    CView* pView = (CView*)m_viewList.GetHead();
    ASSERT_VALID(pView);
    CFrameWnd* pFrame = pView->EnsureParentFrame();

    // and close it
    PreCloseFrame(pFrame);
    pFrame->DestroyWindow();
        // will destroy the view as well

m_bAutoDelete = bAutoDelete;

我想我可以将它与 CDocument::RemoveView 结合使用。有没有比仅仅提升 MFC 源更好的方法来解决这个问题,这种方法会不会给我带来其他问题或副作用?项目为VS2010 C++。

【问题讨论】:

【参考方案1】:

如果您将 CDocument::m_bAutoDelete 设置为 FALSE(在创建文档之后),它不应该在最后一个视图关闭时删除文档。

我不确定您具体要做什么,但您可能需要考虑创建一个单独的“数据”对象,该对象可以附加到文档中,而不是试图保留文档本身。

【讨论】:

以上是关于如何在保持文档打开的同时关闭 MFC CVIEW的主要内容,如果未能解决你的问题,请参考以下文章

关于MFC视图文档框架的理解-1

在 MFC 中如何从 CWinAppEx 访问 CView

MFC CView 进入 CDockablePane

mfc中MDI模式下实现单文档多视图多窗口

如何在MFC应用程序中添加文档菜单?

手动创建CView视图