2015-10-26 2 views
0

Я создал диалог тк с CSplitterWnd, который имеет три различных панелей, созданных, как это:Установка активной панели в 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) и установить курсор на другой курсор (я использую серую стрелку) при перемещении мыши –

Смежные вопросы