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++ です。