MFC MDI アプリケーションを作成し、右クリックして "AddSplitWnd" ポップ メニュー項目を選択することで、ウィンドウを一度に 2 つの部分に動的に分割したいと考えています。CSplitterWnd::CreateStatic を使用して実装しようとしています。ウィンドウが分割されたら、新しいビューを作成する必要がありますが、代わりに前のビューを使用したいので、実装方法を知っている人はいますか? ありがとうございました。
質問する
3917 次
1 に答える
0
以下は、SDI 環境のスプリッターでビューを交換するためのコード スニペットです。これは、MDI でも動作するように適応できるはずです。
CView* CDoc::SwitchToView(CView* pNewView)
{
CFrameWndEx* pMainWnd = (CFrameWndEx*)AfxGetMainWnd();
CView* pOldActiveView;
pOldActiveView = pMainWnd->GetActiveView();
CSplitterWnd* pSplitter = (CSplitterWnd *)pOldActiveView->GetParent();
// in this case Pane 0,0 is exchanged
pOldActiveView = (CView*) pSplitter->GetPane(0,0);
// set flag so that document will not be deleted when view is destroyed
m_bAutoDelete = FALSE;
// Dettach existing view
RemoveView(pOldActiveView);
// set flag back to default
m_bAutoDelete = TRUE;
// Set the child window ID of the active view to the ID of the corresponding
// pane. Set the child ID of the previously active view to some other ID.
::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, 0);
::SetWindowLong(pNewView->m_hWnd, GWL_ID, pSplitter->IdFromRowCol(0,0));
// Show the newly active view and hide the inactive view.
pNewView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE);
// Attach new view
AddView(pNewView);
// Set active
pSplitter->GetParentFrame()->SetActiveView(pNewView);
pSplitter->RecalcLayout();
return pOldActiveView;
}
HTH
于 2012-04-21T10:55:22.563 に答える