MFC中如何创建2行1列的分割窗?

soldier3 2012-12-14 04:52:19

用winsplitter划分的窗体,第0行再次分为两列,在第0行第0列,第0航第1列中分别插入两个formview。可是第0行的高度老是为零。
但是,把第1行拆分为两列,无论是第0行,还是第1行的高度都不会为零。也就是所第0行不能拆分,只能为一个form的时候正常。
后来在网上找到一些资料,在onsize()中 m_wndVSplitter.RecalcLayout()也是不行。所以请教大家该如何解决?谢谢!
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-04-02
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
傻X 2012-12-15
  • 打赏
  • 举报
回复
来,给你个例子看看吧。上次有人正好问过我这个问题。连格式都和你一样 视图内容,自己保证

//第一步:OnCreateClient
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
{
    m_bSpliterCreated = m_wndSplitter.CreateStatic(this,2,1);        //建立外层架构,一行两列
 
    m_wndLeftSplitter.CreateStatic(              //建立内层架构,两行一列
        &m_wndSplitter,                          //以外层splitter为父窗体
        1,2,
        WS_CHILD|WS_VISIBLE,
        m_wndSplitter.IdFromRowCol(0,0)             //指定新的splitter占据外层架构的左方格
        );
 
 
    m_wndLeftSplitter.CreateView(
        0,0,
        RUNTIME_CLASS(CVedioClientView),
        CSize(0,0),
        pContext
        );
 
    m_wndLeftSplitter.CreateView(
        0,1,
        RUNTIME_CLASS(CAlarmMesListView),
        CSize(0,0),
        pContext
        );
 
    m_wndSplitter.CreateView(
        1,0,
        RUNTIME_CLASS(CDeviceTreeView),
        CSize(0,0),
        pContext
        );
     
    g_pVedioClientView = (CVedioClientView*)m_wndLeftSplitter.GetPane(0,0);
    g_pDeviceTreeView = (CDeviceTreeView*)m_wndSplitter.GetPane(0,0);
    g_pAlarmMesListView = (CAlarmMesListView*)m_wndSplitter.GetPane(1,0);
    g_pAlarmMesListView->SetWindowTextA("报警");
    return m_bSpliterCreated;
}
 
 
 
//第二步:OnSize也需要修改
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
    CFrameWnd::OnSize(nType, cx, cy);
 
    // TODO: 在此处添加消息处理程序代码
    CRect rect;
    GetWindowRect(&rect);
    if (m_bSpliterCreated)
    {
        m_wndSplitter.SetRowInfo(0,rect.Height()/2,1);
        m_wndSplitter.SetRowInfo(1,rect.Height()/2,1);
 
        m_wndLeftSplitter.SetColumnInfo(0,rect.Width()/2,1);
        m_wndLeftSplitter.SetColumnInfo(1,rect.Width()/2,1);
        m_wndSplitter.RecalcLayout();
    }
}
soldier3 2012-12-15
  • 打赏
  • 举报
回复
如何指定???
bsnry 2012-12-15
  • 打赏
  • 举报
回复
引用 3 楼 tiger9991 的回复:
来,给你个例子看看吧。上次有人正好问过我这个问题。连格式都和你一样 视图内容,自己保证 C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162//第一步:OnCreat……
void SetRowInfo( int row, int cyIdeal, int cyMin ); void RecalcLayout();
schlafenhamster 2012-12-14
  • 打赏
  • 举报
回复
"可是第0行的高度" 可以指定 高度

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧