MFC一一拆分窗口类CSplitterWnd

拆分窗口类,提供分离窗口的功能,使一个窗口包含多个方格。窗格一般是由CView派生出来的对象,但它也可以是具有适当子窗口ID的任何CWnd对象。

创建步骤:

1.在父框架CMainFrame中创建一个CSplitterWnd成员变量

2.重载父框架窗口的OnCreateClient/或主View类中的OnCreate函数

3.在函数中调用Create(动态创建)或CreateStatic(静态创建)成员函数

/*
BOOL Create(CWnd* pParentWnd,int nMaxRows,int nMaxCols,SIZE sizeMin,CCreateContext* pContext,DWORD dwStyle,UINT nID);
功能描述:该函数用来创建动态切分窗口。 
参数含义:pParentWnd 切分窗口的父框架窗口。 
		 nMaxRows,nMaxCols是创建的最大的列数和行数。 
		 sizeMin是窗格的现实大小。 
		 pContext 大多数情况下传给父窗口。 
		 nID是字窗口的ID号.

BOOL CreateStatic(CWnd* pParentWnd,int nRows,int nCols,DWORD dwStyle,UINT nID)
功能描述:用来创建切分窗口。 参数含义同上。

BOOL CreateView (int row,int col,CruntimeClass* pViewClass,SIZE sizeinit,CcreateContext* pContext);
功能描述:为静态切分的窗口的网格填充视图。在将视图于切分窗口联系在一起的时候必 须先将切分窗口创建好。 
参数含义:同上。
*/
int CMyTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	CCreateContext* pContext = (CCreateContext*)lpCreateStruct->lpCreateParams;
	m_wndSplitter.CreateStatic(this,2,1);//创建一个静态分栏窗口,分为二行一列

	CRect rect;
	GetClientRect(&rect);

	//CTabView窗格占窗体的上面4/5
	m_wndSplitter.CreateView(0,0,// 窗格的行、列序数
		RUNTIME_CLASS(CTabViewEx),//视图类,继承自CTabView
		CSize(rect.Width(),rect.Height()*4/5),//初始化大小
		pContext);//父窗口的创建参数

	//CEditViewLog窗格占窗体的最后1/5
	m_wndSplitter.CreateView(1,0,
		RUNTIME_CLASS(CEditViewEx),//编辑窗口类,继承自CEditView
		CSize(rect.Width(),rect.Height()/5),
		pContext);

	return 0;
    }
然后在OnSize中利用对应的成员函数调整分隔栏位置

void CMyTestView::OnSize(UINT nType, int cx, int cy)
   {
	CView::OnSize(nType, cx, cy);

	// TODO: 在此处添加消息处理程序代码
	CRect rect;
	GetClientRect(&rect);
	int x = rect.Width();
	int y = rect.Height();
	m_wndSplitter.MoveWindow(0,0,x,y);
	//m_wndSplitter.SetColumnInfo(0, x/4,0);
	m_wndSplitter.SetRowInfo(0, y-y/4,0); //设置窗口0对应的行信息
	m_wndSplitter.SetRowInfo(1, y/4, 0);  //设置窗口1对应的行信息
	m_wndSplitter.RecalcLayout(); //在调整行或列尺寸后调用此函数来重新显示该分隔器窗口
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值