2015-10-26 24 views
0

我已經創建了CSplitterWnd一個MFC對話框,它具有這樣創建了三個不同的面板:設置活動面板中CSplitterWnd

BOOL CUserSplit::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{ 
    WINDOWPLACEMENT wpDlg; 
    GetWindowPlacement(&wpDlg); 

    if (!m_wndSplitter.CreateStatic(this, 1, 3, WS_CHILD | WS_VISIBLE | WS_BORDER)) 
    { 
     TRACE0("Failed to CreateStaticSplitter\n"); 
     return FALSE; 
    } 

    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSearchDlg), CSize(250, 0), pContext)) 
    { 
     TRACE0("Failed to create first pane\n"); 
     return FALSE; 
    } 
    if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CProfileDlg), CSize(870, 0), pContext)) 
    { 
     TRACE0("Failed to create second pane\n"); 
     return FALSE; 
    } 
    if (!m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS(CControlDlg), CSize(0, 0), pContext)) 
    { 
     TRACE0("Failed to create third pane\n"); 
     return FALSE; 
    } 
    SetWindowPos(NULL, 0, 0, 1285, 900, SWP_NOZORDER | SWP_NOMOVE); 
    GetParentFrame()->CenterWindow(); 
    return TRUE; 
} 

在做這樣的第一面板上負載活躍。我如何將第二個(中間)面板設置爲活動狀態?

回答

3

你可以在指定的位置,就這樣的觀點:

CView* pView = (CView *)m_pWndSplitter->GetDlgItem(m_pWndSplitter->IdFromRowCol(0, 0)); 

之後,只需調用

SetActiveView(pView); 

你也可以嘗試使用以下方法:

m_pWndSplitter->SetActivePane(nRow, nCol); 
+0

您的第一個解決方案效果很好。謝謝! – Mangs

+0

如果鼠標不在當前活動視圖中,您還需要一個可視指示器,則可以檢查[GetActiveView()](https://msdn.microsoft.com/en-us/library/zs0t7t34.aspx)並設置光標移動到另一個光標(我使用灰色箭頭) –