0

MFC CDocument と関連する CView を MDI アプリケーションで開いています。ドキュメントを開いたまま、ビュー (および関連するフレーム) を切り離して閉じたいと思います。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++ です。

4

1 に答える 1

1

CDocument::m_bAutoDelete を FALSE に設定すると (ドキュメントが作成された後)、最後のビューが閉じられたときにドキュメントが削除されません。

具体的に何をしようとしているのかはわかりませんが、ドキュメント自体を保持しようとするのではなく、ドキュメントに添付できる別の「データ」オブジェクトを作成することを検討することをお勧めします。

于 2012-11-09T10:23:41.973 に答える