zoukankan      html  css  js  c++  java
  • 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();
    
        }
    }

    生成的程序如图显示:

  • 相关阅读:
    第六次学习笔记
    第四篇笔记
    第三篇学习笔记
    第二篇学习笔记
    第一篇学习笔记
    px与dp、sp之间的转换
    SQLite的使用(二):数据增删改查
    Logcat的级别以及Logcat的调试使用
    Android 创建服务(一)
    简说SQLite
  • 原文地址:https://www.cnblogs.com/touch-skyer/p/6385830.html
Copyright © 2011-2022 走看看