none
MFC中关于窗口分割后,如何控制分割条的移动范围 RRS feed

  • 常规讨论

  • 问题描述:
        用MFC 建了一个工程,并将窗口分成了上下两行,并将上边一行分成左右两个窗口。效果如下
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    \\                   \\                                        \\
    \\                   \\                                        \\
    \\                   分                                        \\
    \\                   隔                                        \\
    \\                   条                                        \\
    \\                    2                                        \\
    \\                   \\                                        \\
    \\\AAAAAAAAA\\\\\\\\\\\\\\\\\分隔条1\\\\\\\\\\\
    \\                                                               \\
    \\                                                               \\
    \\                                                               \\
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 
    要达到的效果是限制分隔条的移动范围,只能往左拖动,而不能往右拖动,分割条1可以任意拖动。
    开发环境:winxp,VS2005,MYSQL
    2010年2月1日 12:52

全部回复

  • 这个好办:

    1) 在项目中添加一个类,CSplitterWndEx1 公有继承于CSplitterWnd 类;
    2) 在CSplitterWndEx1 类中响应WM_MOUSEMOVE 消息, 创建OnMouseMove 函数;
    3) 在CSplitterWndEx1::OnMouseMove(UINT nFlags, CPoint point) 函数添加以下代码:

        if(point.x <= 200)
            CSplitterWnd::OnMouseMove(nFlags, point);

    4) 在MainFrm.h 文件中找到m_splitterWnd 变量的定义,将CSplitterWnd m_splitterWnd; 改为 CSpitterWndEx1 m_splitterWnd;

    这样纵向分割条只能在0-200 个像素的宽度中移动了。 如果想控制水平分隔条,就检查point.y 的值。
    2010年2月1日 13:12
    版主
  • 我是在CSplitterWnd类里有个OnMouseMove成员,主要代码如下,但这样做有个问题,只能控制分割条2,而分割条1却不能拖动,准确点说是能拖动,但是,鼠标要放在A部分才能拖动分隔条2,主要是要限制分隔条2的拖动,而不限制分割条1的拖动,分隔条1可以任意拖动请问该怎么做
    CRect rect
    if(point.x <rect.with()/5) 



    CWnd::OnMouseMove(nFlags, point); 



    else

    {   

    CSplitterWnd::OnMouseMove(nFlags, point); 

    }
    2010年2月1日 13:37
  • 按照我说的那样做,子类化一个分割窗体类。 按照你的做法,两个滚动条不管动哪个,都要执行相同的OnMouseMove 代码,这肯定是比较难的。
    2010年2月1日 13:44
    版主
  • 是这样的吗?
    如果我要控制,分隔条2
    if(point.x <rect.with()/5) 



    CSplitterWnd::OnMouseMove(nFlags, point); 


    但我要实现分割条1的不限制,该怎么做呢,主要代码怎么样去响应
    CSplitterWnd::OnMouseMove(nFlags, point); 

    2010年2月1日 13:56
  • 你可以将分隔条2 声明为CSplitterWndEx1 类型的变量,将分隔条1仍然声明为CSplitterWnd 类型的变量。 这样这两个分隔条就分开了。
    2010年2月1日 14:02
    版主
  • thinks!
    2010年2月3日 5:38