在csplitterwind中设置活动面板

Set active panel in CSplitterWnd

本文关键字:活动 设置 csplitterwind      更新时间:2023-10-16

我用csplitterwind创建了一个mfc对话框,其中有三个不同的面板,如下所示:

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

当这样做时,第一个面板在负载上是活跃的。如何将第二个(中间)面板设置为活动状态?

你可以像这样获取指定位置的视图:

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

之后调用

SetActiveView(pView); 

您也可以尝试使用以下方法:

m_pWndSplitter->SetActivePane(nRow, nCol);

根据MSDN,你应该调用csplitterwind::SetActivePane()