• MFC单文档分割区(CSplitterWnd)


    用VS08程序向导,单文档程序,默认设置生成的。工程名为3view;

    其中默认生成的视图类CMy3viewView,对应3viewView.h,3viewView.cpp;

    在Resourse View添加个新对话框,在对话框的属性中,Border设置成None;Style设置成Child;

    生成的新类中Base class设置为CFormView;  本程序中定义类名为CDefFormView;

    默认生成的文档类为:3viewDoc.h,3viewDoc.cpp;

    在主框架头文件MainFrm.h中添加如下头文件; //为了调用程序默认的视类CMy3viewView;

    #include "3viewDoc.h"
    #include "3viewView.h"

    并添加如下变量

     CSplitterWnd m_wndSplitter;
     CSplitterWnd m_wndSPlitterTB;
     CSplitterWnd m_wndSPlitterTB2;
     BOOL m_is_spilit  //用来判断分割窗口是否成功,做为窗口自适应大小的变量

    并重载OnCreateClient函数

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
        // TODO: Add your specialized code here and/or call the base class
        CRect ct;
        GetClientRect(&ct);
        //主框架左右分成1行3列
        m_wndSplitter.CreateStatic(this,1,3);
    
        //在m_wndSplitter的第1行第1列分割区成2行1列
        m_wndSPlitterTB.CreateStatic(&m_wndSplitter,2,1,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0,0));
        //在m_wndSplitter的第1行第2列分割区成2行1列
        m_wndSPlitterTB2.CreateStatic(&m_wndSplitter,3,1,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0,1));    
    
        //在m_wndSPlitterTB中创建第1行第1列视图
        m_wndSPlitterTB.CreateView(0,0,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/3,ct.Height()/2),pContext);    
        //在m_wndSPlitterTB中创建第2行第1列视图
        m_wndSPlitterTB.CreateView(1,0,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/3,ct.Height()/2),pContext); 
    
        //在m_wndSPlitterTB2中创建第1行第1列视图
        m_wndSPlitterTB2.CreateView(0,0,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/3,ct.Height()/3),pContext); 
        //在m_wndSPlitterTB2中创建第2行第1列视图
        m_wndSPlitterTB2.CreateView(1,0,RUNTIME_CLASS(CMy3viewView),CSize(ct.Width()/3,ct.Height()/3),pContext); 
        //在m_wndSPlitterTB2中创建第3行第1列视图
        m_wndSPlitterTB2.CreateView(2,0,RUNTIME_CLASS(CDefFormView),CSize(ct.Width()/3,ct.Height()/3),pContext); 
    
        //在m_wndSPlitter中创建第1行第3列的视图
    m_wndSplitter.CreateView(
    0,2,RUNTIME_CLASS(CMy3viewView),CSize(ct.Width()/3,0),pContext);
      
      m_wndSplitter.SetColumnInfo(0,ct.Width()/3,50);
      m_wndSplitter.SetColumnInfo(1,ct.Width()/3,50);
      m_wndSplitter.SetColumnInfo(2,ct.Width()/3,50);

    //获取对应视图的对象 CMy3viewView* view = (CMy3viewView *)m_wndSplitter.GetPane(0,2); CDefFormView* view2 = (CDefFormView*)m_wndSPlitterTB.GetPane(0,0); return TRUE; //return CFrameWnd::OnCreateClient(lpcs, pContext); }

    重载OnSize函数:(主框架大小变化是分割窗口自适应大小)

    void CMainFrame::OnSize(UINT nType, int cx, int cy)
    {
        CFrameWnd::OnSize(nType, cx, cy);
    
        // TODO: Add your message handler code here
        if(m_is_spilit)
        {
            CRect ct;
            GetClientRect(&ct);
    
            m_wndSplitter.SetRowInfo(0,ct.Height(),0);
            m_wndSplitter.SetColumnInfo(0,ct.Width()/3,50);
            m_wndSplitter.SetColumnInfo(1,ct.Width()/3,50);
            m_wndSplitter.SetColumnInfo(2,ct.Width()/3,50);
    
            m_wndSPlitterTB.SetRowInfo(0,ct.Height()/2,50);
            m_wndSPlitterTB.SetRowInfo(1,ct.Height()/2,50);
    
            m_wndSPlitterTB2.SetRowInfo(0,ct.Height()/3,50);
            m_wndSPlitterTB2.SetRowInfo(1,ct.Height()/3,50);
            m_wndSPlitterTB2.SetRowInfo(2,ct.Height()/3,50);
    
            m_wndSplitter.RecalcLayout();
    
        }
    }

    生成的程序如图显示:

  • 相关阅读:
    android开发中如何开启用户安装的应用程序?
    丑数查找算法
    session.save_path目录大量session临时文件带来的服务器效率问题
    MOSS点滴(1):如何开发和部署feature
    如何将Excel中两个单元格或两列中的数据合并
    如何在 MOSS 2007 启用 Session
    MOSS LIST的一些属性说明
    国外广播电台
    Excel 导出 按钮
    在文档库或 Windows SharePoint Services SharePoint Portal Server 中创建一个新的文件夹或新文档时,您会收到一个"指定的文件或文件夹名太长"错误消息
  • 原文地址:https://www.cnblogs.com/touch-skyer/p/6385830.html
Copyright © 2020-2023  润新知