c++ - 在 CSplitterWnd 中设置事件面板

标签 c++ mfc

我用 CSplitterWnd 创建了一个 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 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;
}

这样做时,第一个面板在加载时处于事件状态。如何将第二个(中间)面板设置为事件面板?

最佳答案

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

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

之后就调用

SetActiveView(pView); 

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

m_pWndSplitter->SetActivePane(nRow, nCol);

关于c++ - 在 CSplitterWnd 中设置事件面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33346775/

相关文章:

c++ - 针对 MFC42 的 Visual Studio 2015 链接

c++ - 关于 c 中浮点运算的异常,关于从自身减去一个数

c++ - 使用 lambda 将一种类型的 vector 映射到另一种类型

visual-c++ - 如何在 MFC 对话框中添加关闭按钮

c++ - 使用 CFileDialog 选择文件时的绘画问题

c++ - MFC如何解释SetWindowTextW(LPCTSTR)?

c++ - 我可以使用std::array的自定义分配器来获得安全的加密 key 吗?

c++ - array<int,2> dim 在这段代码中是什么意思?

c++ - 在四核处理器上运行 MPICH 时出错

c++ - mfc 复制 CString 的某些部分