gpt4 book ai didi

mfc - 使用 CSplitterWnd 在 CChildFrame 中创建多 View

转载 作者:行者123 更新时间:2023-12-04 14:15:35 25 4
gpt4 key购买 nike

我正在使用 MFC MDI。我需要创建如下 View 。我的 ChildWnd 分为两部分。它们是 LeftView,它是一个 CView 和 RightView,它是一个 CScrollView。 LeftView 分为两部分,TreeView 和 FormView。我该怎么做?

_________________________________
| | |
| | |
|CTreeView | |
| | |
| | |
| | CScrollView |
|___________| |
| | |
| | |
|CFormView | |
| | |
| | |
----------------------------------

最佳答案

我终于解决了这个问题。我为遇到类似问题的任何人编写了解决方案。

  1. 在CChildFrame类中,声明CSplitterWnd m_SplitterWnd;

  2. 在 CChildFrame::OnCreateClient 中放置以下代码:

    if(!m_SplitterWnd.CreateStatic(this, 1, 2))
    {
    TRACE("Failed to create splitter window");
    return FALSE;
    }
    pContext->m_pNewViewClass = RUNTIME_CLASS(CLeftView);
    m_SplitterWnd.CreateView(0, 0, pContext->m_pNewViewClass, CSize(0, 0), pContext);
    m_pLeftView=(CLeftView*)m_SplitterWnd.GetPane(0,0);
    CCreateContext context;
    context.m_pNewViewClass = pContext->m_pNewViewClass; //save original

    pContext->m_pNewViewClass = RUNTIME_CLASS(CRightView);
    m_SplitterWnd.CreateView(0, 1, pContext->m_pNewViewClass, CSize(0, 0), pContext);
    pContext->m_pNewViewClass = context.m_pNewViewClass; //return to original
    m_pRightView=(CRightView*)m_SplitterWnd.GetPane(0,1);

    int nWidth=rc.Width();
    m_SplitterWnd.SetColumnInfo(0, nWidth*0.25, 50);
    m_SplitterWnd.SetColumnInfo(1, nWidth*0.75, 50);

    CLeftView 是 MFC CView 的派生类。

  3. 在CLeftView中声明一个成员变量CSplitterWnd m_SplitterWnd;

  4. 在 CLeftView::OnCreate 中,添加以下代码:

    CCreateContext *pContext = (CCreateContext*) lpCreateStruct->lpCreateParams;

    if(!m_SplitterWnd.CreateStatic(this, 2, 1, WS_CHILD | WS_VISIBLE, AFX_IDW_PANE_FIRST+8))
    {
    TRACE("Failed to create splitter window");
    return FALSE;
    }
    pContext->m_pNewViewClass = RUNTIME_CLASS(CPhongView);
    m_SplitterWnd.CreateView(0, 0, pContext->m_pNewViewClass, CSize(0, 0), pContext);
    m_pPhongView=(CPhongView*)m_SplitterWnd.GetPane(0, 0);
    CCreateContext context;
    context.m_pNewViewClass = pContext->m_pNewViewClass; //save original

    pContext->m_pNewViewClass = RUNTIME_CLASS(CPhongInfo);
    m_SplitterWnd.CreateView(1, 0, pContext->m_pNewViewClass, CSize(0, 0), pContext);
    pContext->m_pNewViewClass = context.m_pNewViewClass; //return to original
    m_pPhongInfo=(CPhongInfo*)m_SplitterWnd.GetPane(1, 0);

    CPhongInfo是CFormView的派生类,CPhongView是CTreeView的类。

  5. 在 CLeftView::OnSize 中,放入以下代码

    m_SplitterWnd.MoveWindow(0, 0, cx, cy);
    int nRow2 = 227;
    int nRow1 = cy - 227;
    m_SplitterWnd.SetRowInfo(0, nRow1, 0);
    m_SplitterWnd.SetRowInfo(1, nRow2, 0);
    m_SplitterWnd.RecalcLayout();

关于mfc - 使用 CSplitterWnd 在 CChildFrame 中创建多 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com