Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5463676
  • 博文数量: 671
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 7310
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-14 09:56
文章分类

全部博文(671)

文章存档

2011年(1)

2010年(2)

2009年(24)

2008年(271)

2007年(319)

2006年(54)

我的朋友

分类:

2007-09-18 18:39:41

做一个项目,把一个单文档的窗口分割成左右两列,同时还需要设置左边窗口的最小尺寸。

找了很多资料,都是针对对话框或者文档的,试了OnSizing和GetMinMaxInfo,结果对分割窗口无效。
后来看到分割窗口的例子有锁定分割条的代码,跟同事讨论了一下,来了灵感。下面是解决办法,其实很简单的,
可能以前有人做过吧,不过我在网上没有搜索到,所以把我的做法写出来跟大家分享。

一、新建一个类CMySplitter,基类为CSplitterWnd

二、重载该类的OnMouseMove函数:

void CMySplitter::OnMouseMove(UINT nFlags, CPoint point)
{ 
	// 限制切分条的运动范围。 
	if(point.x<228||point.x>600) 
	{ 
		CWnd::OnMouseMove(nFlags, point); 
	} 
	else 
	{ 
		CSplitterWnd::OnMouseMove(nFlags, point); 
	} 
}
三、 然后就可以跟一般的窗口分割那样去做了,if(point.x<228||point.x>600)这里的范围可以随你去设置了 ^_^,够简单吧。

四、切分窗口
切分窗口就不用讲那么详细了,在MaiFram.h建立切分条对象:

protected: 
CMySplitter m_wndSplitter; //切分窗口对象 

//在MaiFram.cpp中实现窗口切分: 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext) 
{ 
	// 创建拆分器窗口 
	if (!m_wndSplitter.CreateStatic(this, 1, 2)) 
		return FALSE; 
	if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(228, 100), pContext) || 
		!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDataEditView), CSize(100, 100), pContext)) 
	{ 
		m_wndSplitter.DestroyWindow(); 
		return FALSE; 
	} 

	return TRUE; 
} 
(全文完)
 
 
 



 
 
切分条控制:


 
 
注意:
 
如果CSplitterWndEx同时重载了OnPaint函数则切分条可能将不会显示,但是这样重载就没问题:
void CSplitterWndEx::OnPaint()
{
 //CPaintDC dc(this);一定要注释掉!!!!!!!!!
 // Do not call CDialog::OnPaint() for painting messages
 CSplitterWnd::OnPaint();
}
阅读(2052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~