zoukankan      html  css  js  c++  java
  • MFC CSplitterWnd的用法

    用MFC开发一个软件界面中需要拆分多个试图窗口时,使用CSplitterWnd类

     CSplitterWnd类主要用在创建一个拆分试图窗口。通常嵌入在框架窗口中(CMainFrame)

    创建步骤:

      1.在框架类(CMainFrame)中定义一个CSplitterWnd成员;

      2.重载父框架类中CFrameWnd::OnCreateClient函数

      3.在OnCreateClient()函数中调用CSplitterWnd类的Create或CreateStatic()函数

    例子:

    CSplitterWnd m_wndSplitter;
    
    BOOL CChildFrame::OnCreateClient( LPCREATESTRUCT lpcs, 
       CCreateContext* pContext)
    {
    
        BOOL bCreateSpltr = m_wndSplitter.CreateStatic( this, 2, 1);
    
        // COneView and CAnotherView are user-defined views derived from CMDIView
        m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(COneView), CSize(0,0), 
            pContext);
        m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CAnotherView), CSize(0,0), 
            pContext);
    
        return (bCreateSpltr);
    }

    或者

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
     // TODO: Add your specialized code here and/or call the base class
       if (!m_wndSplitter.CreateStatic(this, 1, 2))
        return FALSE;
    
       if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(160, 200), pContext) ||
        !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTestView), CSize(100, 200), pContext))
       {
          m_wndSplitter.DestroyWindow();
          return FALSE;
       }
       return TRUE;
    
    }

    在创建了多个窗口之后,有时为了能够得到其中的某个窗口,进而对其进行操作控制,则:

    不能简单使用GetActiveView,可从MainFrame的CSplitterWnd成员得到,如下

    CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;
    CViewRes* pViewRes=(CViewRes*)pMF->m_wndSplitter.GetPane(0,1);

    注意:1, 使用CMainFrame,要在调用的cpp文件中包含MainFrame.h
       2, 注意在CMainFrame中,m_wndSplitter变量的类型,若定义为protected或private则可能导致不可引用等错误

    创建静态分割窗口

    virtual BOOL CreateStatic(   
       CWnd* pParentWnd,   
       int nRows,   
       int nCols,   
       DWORD dwStyle = WS_CHILD | WS_VISIBLE,   
       UINT nID = AFX_IDW_PANE_FIRST    
    ); 

    。参数pParentWnd为分割器窗口的父框架窗口、

    参数dwStyle指定窗口风格;

    参数nID为分割窗口的ID 除非分割器窗口嵌入到另一个分割器窗口中,否则可以取值AFX_IDW_PANE_FIRST

    参数nRows为行数,不能超过16;

    参数nCols为列数,同样不能超过16

    virtual BOOL CreateView(   
       int row,   
       int col,   
       CRuntimeClass* pViewClass,   
       SIZE sizeInit,   
       CCreateContext* pContext    
    );  
    CreateView  为静态分割窗口创建窗格视图  

    参数row指定分割器窗口中放置新视图的行;
    参数col指定放置新视图的列;
    参数pViewClass指定新视图的CRuntimeClass对象;
    参数sizeInit指定新视图的初始大小;
    参数pContext为指向CCreateContext结构的指针,通常可以赋值为传递给父框架窗口的重载函数CFrameWnd::OnCreateClient的pContext参数值。

  • 相关阅读:
    新手小白如何购买阿里云服务器?
    nginx 泛域名解析 实现 多域名动态网站内容
    CentOS 安装MySQL 详细教程
    CentOS添加并挂载新硬盘
    docker下nginx+tomcat 文件的上传与访问
    关于人人开源renren-fast-vue 中npm install各种报错的解决方案
    《素面朝天,青春盛宴》
    手把手教你springboot中导出数据到excel中
    使Word文档和PDF文件不可被复制的方法
    博客园中使用MarkDown编辑器向博文中添加视频
  • 原文地址:https://www.cnblogs.com/rosesmall/p/14914624.html
Copyright © 2011-2022 走看看