您的位置:中国风网 > 电脑之家 > 酷软资讯

VC中分割窗口后如何限制分割条移动范围

中国风网 2005-11-5 14:50:43



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


  找了很多资料,都是针对对话框或者文档的,试了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;  
}  

文章来源:天极


推荐给您的朋友】    【发表评论】    【关闭窗口

 ■:相 关 文 章

 VC++动态链接库编程之DLL木马  (10月25日13:59:28)
 华硕紧逼宏基 X700显卡A3Vc到货仅11000  (10月20日16:27:16)
 伪随机数生成及在VC++中的实现  (10月13日14:45:31)
 MATCOM在VC++与MATLAB混合编程中的应用  (10月13日14:40:49)
 VC6.0中如何让new操作失败后抛出异常?  (10月12日15:35:17)
 VC++初学者经典错误LNK2001详解  (10月11日14:42:32)
 创投VC加速增值服务行业整合 四成SP将淘汰  (9月28日8:25:4)
 VC++中使用图形程序设计和动画技术  (9月19日15:53:57)
 VC与Matlab接口编程之Matcom安装配置  (9月16日14:46:33)