0

2行のスプリッターがあるとします。

--------
| | |
--------
| | |
--------

どうすればこれにたどり着くことができますか

---------
| | | | |
| | | | | |
| | | | | |
----------

横分割から縦分割に切り替える

スプリッター全体を再作成する必要はありませんか?

コードは次のとおりです。

if (!m_wndSplitter.CreateStatic(this, 1, 2, WS_CHILD|WS_VISIBLE))
{
    TRACE0("Failed to create splitter window\n");
    return FALSE;
}
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CWnd), CSize(200, 100), NULL))
{
    TRACE0("Failed to create CView1\n");
    return FALSE;
}
if (!m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS(CWnd), CSize(500, 100), NULL))
{
    TRACE0("Failed to create CView2\n");
    return FALSE;
}
4

2 に答える 2

0

----------|----------| | | | | | | | | | | | | | | |---------| | | | | | | | | | | | | ----------|----------|

右側に 2 つの行がある 2 列スプリッター。1 つは上に、もう 1 つは下に、もう 1 つは左側に上と下に ?

于 2011-01-22T09:43:39.620 に答える
0

を使用しないでください。スプリッターCreateStaticでのみ使用してください。Create次に、いわゆる動的スプリッターがあります。詳細については、こちらを参照してください。

スプリッターを horz から vert に変換するときは、ビューをスプリッターから削除し、後で再度アタッチする必要があります。ドキュメントクラスでこれを行う必要があります。必要に応じて、これを行う方法を投稿できます。

わかりました、ペイン内のビューを切り替える方法は次のとおりです。

CView* CGMBefundDoc::SwitchToView(CView* pNewView,int row,int col)
{
CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
CSplitterWnd* pSplitter = &pMainWnd->m_wndSplitter;

CView* pOldActiveView = reinterpret_cast<CView*>(pSplitter->GetPane(row,col));
ASSERT(pOldActiveView != pNewView);

// 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(row,col));

// 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;
}

理解していただければ幸いです。それ以外の場合は、お尋ねください。

于 2010-12-28T10:03:17.277 に答える