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

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

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

时间: 2024-11-03 22:39:11

分割窗口后如何限制分割条的移动范围的相关文章

窗口通信-【MFC分割窗口后的单文档怎么变为多文档??】

问题描述 [MFC分割窗口后的单文档怎么变为多文档??] 网上的办法使过,好像不行:原因可能就是因为窗口被分割了的原因,我将分割窗口的过程全部屏蔽掉以后从单文档变为多文档没有问题.如果加上窗口分割以后就不能变为多文档了.下面是单文档和多文档的差别之一,我的问题也就是在这里.[其实我问题的原因是这样的,想在菜单中弄一个新建文档的命令,而多文档刚好可以解决这个问题,如果能解决这个问题也照样给分] 解决方案 //多文档CMultiDocTemplate* pDocTemplate;pDocTempla

mfc-【MFC静态分割窗口后,窗口通信有哪些方法???】

问题描述 [MFC静态分割窗口后,窗口通信有哪些方法???] 我自己的是从通过doc来传输数据的.发送数据获取文档指针pDoc->infoArray[0].InsertAt(0 数据"");pDoc->add=true;pDoc->UpdateAllViews(NULL);//刷新显示接受数据获取文档指针if(pDoc->add){ CString str; str = pDoc->InfoArray[0].GetAt(0);//str = 数据}那还有没

当文档分割-请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形。

问题描述 请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if(m_splitter.CreateStatic(this,1,2)==NULL) return FALSE; CRect rect; GetClientRect(&rect);

mfc 分割窗口后窗口变化问题

问题描述 mfc 分割窗口后窗口变化问题 mfc 分割窗口后,窗口最大化时,如何让各个窗口等比例随之变化问题 谢谢,大神指导 解决方案 打开classwizard,映射wm_resize消息,添加上面的代码 解决方案二: //OnSize,MoveWindow //eg: void CMainFrame::OnSize(UINT nType, int cx, int cy) { CFrameWnd::OnSize(nType, cx, cy); if (!m_wndStatusBar.m_hWn

在mfc中使用CSplitterWnd分割窗口问题,想要拖动分隔条怎么使小窗口的大小和控件随着变化

问题描述 在mfc中使用CSplitterWnd分割窗口问题,想要拖动分隔条怎么使小窗口的大小和控件随着变化 如上所述,我现在已经把一个界面分割成2行3列的6个小窗口,用来显示曲线图.但是,当我拖动分隔条的时候主要查看某一个小窗口的时候,里面的控件和位置都没有变化,现在怎么才能使其窗口和里面的控件随着我的拖动放大缩小呢..求救啊!!!谢谢啦!! 解决方案 处理View中的WM_SIZE消息等,然后再等比例的MoveWindow等来调整控件的大小位置

【数字图像处理】 二.MFC单文档分割窗口显示图片

本文是讲述<数字图像处理>系列文章,继上篇讲述BMP格式图片和显示后,该篇讲述如何对单文档进行分割.主要是采用CSplitterWnd静态分割窗口显示图片等相关知识.本文主要结合自己的课程及常用图片软件讲解. 一. CSplitterWnd静态分割窗口 1.CSplitterWnd类基础知识(该部分引用:百度百科和麦田里的稻草人博客)CSplitterWnd类提供一个分离器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口.窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗

mfc-MFC创建分割窗口出现问题

问题描述 MFC创建分割窗口出现问题 if (!m_WndSplitter.CreateView(0, 0, pContext->m_pNewViewClass, CSize(250, 0), pContext)) { TRACE0("Failed to create first pane "); return FALSE; } // add the second splitter pane - an input view in column 1 if (!m_WndSplitt

mfc-MFC动态分割窗口,pContext指针始终为空

问题描述 MFC动态分割窗口,pContext指针始终为空 我需要动态的分割某一个视图,假如我在继承自CWnd或者CView的类MyClass的create中写 m_Split.createStatic();CCreateContext* pContext = (CCreateContext*)lpCreateStruct->lpCreateParams;m_Split.createView(......pContext); 编译,链接都没问题,但分割的窗口就是现实不出来.我看了一下变量,pCo

mfc-MFC分割窗口之间的通信问题

问题描述 MFC分割窗口之间的通信问题 写一个MFC程序,大概功能是主窗口显示图片,子窗口显示处理的结果(一个字符串).主窗口Myview,分割的子窗口是自己新建的view类NewView,问题是不知道这两个窗口之间如何通信?就是把MyView中的一个变量传递给NewView并显示出来即可.现在的一个思路是在DOC中定义这个变量,在MyView中对其赋值,在NewView中通过GetDocument函数得到这个值并显示,但是试了几次好像行不通,不知道有什么好的解决方法没有.或者有没有别的思路来实