注册 登录
编程论坛 VC++/MFC

MFC窗口分割问题

恶魔_铃铛 发布于 2012-12-14 16:26, 376 次点击
以下是我重载的oncreateclient函数,
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
   
    CRect cr;  GetWindowRect(&cr);
if(m_splitter.CreateStatic(this,1,2)==NULL)
        return FALSE;
if(m_splitter2.CreateStatic(&m_splitter,2,1,WS_CHILD|WS_VISIBLE,
        m_splitter.IdFromRowCol(0, 0))==NULL)
        return FALSE;
 m_splitter2.CreateView(0,0,RUNTIME_CLASS(Formview1),CSize(cr.Width()/2, cr.Height()/2),pContext);
 m_splitter2.CreateView(1,0,RUNTIME_CLASS(Formview2),CSize(cr.Width()/2, cr.Height()/2),pContext);
  if(m_splitter1.CreateStatic(&m_splitter,2,1,WS_CHILD|WS_VISIBLE,
        m_splitter.IdFromRowCol(0, 1))==NULL)
        return FALSE;
    m_splitter1.CreateView(0,0,RUNTIME_CLASS(Formview3),CSize(cr.Width()/2, cr.Height()/2),pContext);
   m_splitter1.CreateView(1,0,RUNTIME_CLASS(Formview4),CSize(cr.Width()/2, cr.Height()/2),pContext);
     return TRUE;
}
其中Formview1,2,3,4是我的几个继承CFORMVIEW的对话框类,m_splitter,1,2是CSplitterWnd对象,现在出现的问题是
左边的分割窗格老是靠着最左边如图所示,而且各窗口大小并非如cr.Width()/2, cr.Height()/2设置的这样,求大神解读。。。
附件是结果的截图。。。。
只有本站会员才能查看附件,请 登录
2 回复
#2
crystall2012-12-14 17:27
在 return TRUE; 之前加上这个函数SetColumnInfo
#3
crystall2012-12-14 17:35
程序代码:
//这是我以前写的,贴上来供你参考参考

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
    // TODO: Add your specialized code here and/or call the base class

   
//以下创建的为1行3列

   
//创建静态分隔条
    m_Splitter1.CreateStatic(this,1,3);
   
    //创建第1行,第1列的视图
    m_Splitter1.CreateView(0,
                           0,
                         RUNTIME_CLASS(CMyListView),
                         CSize(400, 0),
                         pContext
                         );
   //创建第1行,第3列的视图
    m_Splitter1.CreateView(0,
                           2,
                         RUNTIME_CLASS(CMyListView),
                         CSize(400,0),
                         pContext
                         );

    //然后在第2列中 划分2行
   
//再创建一个分隔条
    m_Splitter2.CreateStatic(&m_Splitter1,2,1,WS_CHILD|WS_VISIBLE,
                              m_Splitter1.IdFromRowCol(0,1));

    m_Splitter2.CreateView(0,0,
                           RUNTIME_CLASS(CMyFormView),
                           CSize(0,400),pContext);

    m_Splitter2.CreateView(1,0,
                           RUNTIME_CLASS(CMyTreeView),
                           CSize(0,0),pContext);
                          
    //设置分割条的列最小宽度
   
//列将以设置的宽度显示           
   
//void SetColumnInfo( int col,       列标识
   
//                      int cxIdeal, 列的实际宽度 单位为像素
   
//                      int cxMin ); 列的最小宽度 单位为像素

   
   
//自己处理了OnCreateClient,不需要再调用 父类的OnCreateClient
   
//return CFrameWnd::OnCreateClient(lpcs, pContext);

    m_Splitter1.SetColumnInfo(0, 300, 100);
    m_Splitter1.SetColumnInfo(1, 500, 100);

    return TRUE;

1