vc分割窗口,窗口通信。通信方式很简单。

/************************************************
* 标   题 : 使用VC6.0实现窗口的任意分割 *
* 用   途 : *
* 整 理 人: ffww *
* 整理日期: 2006-12-11 9:18:42 *
* 附    注: ★★★ *
*************************************************/
一、关于CSplitterWnd类
1、用来创建动态切分窗口
BOOL Create(CWnd* pParentWnd,int nMaxRows,int nMaxCols,SIZE sizeMin,CCreateContext* pContext,DWORD dwStyle,UINT nID);
2、用来创建静态切分窗口
BOOL CreateStatic(CWnd* pParentWnd,int nRows,int nCols,DWORD dwStyle,UINT nID) 
3、为静态切分的窗口的网格填充视图
BOOL CreateView (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext); 
4、参数说明
pParentWnd 切分窗口的父框架窗口。
     nMaxRows,nMaxCols是创建的最大的列数和行数。 
     sizeMin是窗格的现实大小。 
     pContext 大多数情况下传给父窗口。 
     nID是字窗口的ID号. 
二、创建嵌套分割窗口
1、动态分割窗口
动态分割窗口使用Create方法,例:m_wndSplitter.Create(this,2,2,CSize(100,100),pContext); 但是一般不使用动态分割,不实用
2、静态分割窗口(适用于SDI、MDI程序)
1)创建单文档ww,生成的视类为CWwView,从CFormView继承,在增加3个视类或者从视类继承而来的派生类CView2、CView3
2)在框架类CMainFrame的.cpp文件中加入头文件,并在CWwView类定义前加上class CWwDoc;
#include "view2.h"
#include "view3.h"
#include "wwView.h" //注意这里,必须在CWwView类定义前加上class CWwDoc;否则编译3条错误
3)在框架类CMainFrame中增加成员: 
   CSplitterWnd m_wndSplitter1;
   CSplitterWnd m_wndSplitter2;
4)利用ClassWizard重载CMainFrame::OnCreateClient()函数
//----------------------------------------------------------------------------------------------
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
//创建一个1行2列
m_wndSplitter1.CreateStatic(this,1,2);
//将CWwView连接到0行0列窗格上
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CWwView),CSize(100,100),pContext);
//将窗口右边再分开2行1列
m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_CHILD|WS_VISIBLE, m_wndSplitter1.IdFromRowCol(0, 1));
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CView2),CSize(100,100),pContext);
m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(CView3),CSize(100,100),pContext);

     return TRUE;
}
  //----------------------------------------------------------------------------------------------
 
注意:
① 必须为每个静态切分窗格创建视图窗口,不能漏掉一个;
② 如果从一个CformView类继承的视类,此对话框要作如下设置
style=Child
Border=None
Visible=不选中
② 若在CWwView窗口上放入一TreeCtrl,为了在改变窗口时随窗口大小而改变(类似CB中的居中),可以在CWwView类的WM_SIZE中添加代码如下:
//------------------------------------------------------------
void CWwView::OnSize(UINT nType, int cx, int cy) 
{
CFormView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
if (GetSafeHwnd())
{
CRect rect;
GetClientRect(&rect);
if (m_TreeCtrl.GetSafeHwnd())
m_TreeCtrl.MoveWindow(&rect);
}

}
//------------------------------------------------------------
//在WM_ONINITALUPDATE消息中,添加初始化数据
void CWwView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//上面的代码不用管,是啥就是啥,
m_TreeCtrl.InsertItem("ListCtrl View", 1, 1);
m_TreeCtrl.InsertItem("EditCtrl View", 2, 2);

}





三、实现各个分割区域的通信
点击Button1按钮,在CView2中显示文字
1、在CWwView的.cpp文件中加入:
#include "view2.h"
#include "MainFrm.h"
2、添加按钮代码:
//----------------------------------------------------------------------------------------------
void CWwView::OnButton1() 
{
//得到一SplitterView的指针
CView2 *pView=(CView2*)(((CMainFrame*)AfxGetMainWnd())->m_wndSplitter2.GetPane(0,0));
//定义View的DC
CClientDC dc(pView);
dc.MoveTo(10,10);
dc.LineTo(10,100);
dc.TextOut(10,10,"m_wndSplitter2的0行0列就是CView2");
}
//----------------------------------------------------------------------------------------------
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值