VERIFY(m_wndSplitter1.CreateStatic(this, 2, 1));
VERIFY(m_wndSplitter2.CreateStatic(&m_wndSplitter1, 1, 2,
WS_CHILD | WS_VISIBLE| WS_BORDER ,m_wndSplitter1.IdFromRowCol(0,0)));
VERIFY(m_wndSplitter3.CreateStatic(&m_wndSplitter2, 2, 2,
WS_CHILD | WS_VISIBLE ,m_wndSplitter2.IdFromRowCol(0,0)));
VERIFY(m_wndSplitter3.CreateView(0, 0, RUNTIME_CLASS(CVFSDView),
CSize(300, 450), pContext));
VERIFY(m_wndSplitter3.CreateView(1, 0, RUNTIME_CLASS(CVFSDVIEW01),//01
CSize(300, 450), pContext));
VERIFY(m_wndSplitter3.CreateView(0, 1, RUNTIME_CLASS(CVFSDVIEW10),//10
CSize(300, 450), pContext));
VERIFY(m_wndSplitter3.CreateView(1, 1, RUNTIME_CLASS(CVFSDVIEW11),//11
CSize(300, 450), pContext));
VERIFY(m_wndSplitter1.CreateView(1, 0, RUNTIME_CLASS(CVFSDVIEWBOTTOM),//Bottom
CSize(300, 1200), pContext));
VERIFY(m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(CVFSDVIEWRIGHT),//right
CSize(600, 300), pContext));
m_wndSplitter1.SetRowInfo(0,600,0);
m_wndSplitter1.SetRowInfo(1,300,0); m_wndSplitter2.SetColumnInfo(0,900,0);
m_wndSplitter2.SetColumnInfo(1,300,0); m_wndSplitter3.SetRowInfo(0,300,0);
m_wndSplitter3.SetRowInfo(1,300,0);
m_wndSplitter3.SetColumnInfo(0,450,0);
m_wndSplitter3.SetColumnInfo(1,450,0);窗口分屏后鼠标拖动可以改变分屏大小,我想将它屏蔽,请问怎么解决啊,谢谢了

解决方案 »

  1.   

    添加WM_NCHITTEST的消息响应函数
    CSplitterWindow::OnNcHitTest
    return HTNOWHERE或者
    通过响应WM_MOUSEMOVE、WM_LBUTTONDOWN 等消息,在响应中屏蔽对基类同名函数的调用,直接对CWnd类的同名函数调用
      

  2.   

    一般用CSplitterWnd来分割窗口。但要使分割后窗格不能移动,要用CSplitterWnd的派生类。 
    其生成方法是:新建一个类CFixSplitterWnd,基类是CSplitterWnd;
    然后重写下面三个函数:
    改写以下函数: 
    void CFixSplitterWnd::OnLButtonDown(UINT nFlags, CPoint point)
    {    
        // 直接返回,不处理
        return; 
    }BOOL CFixSplitterWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
    {  
         // 当光标进入分割窗口时,不允许改变样子,不处理
         return FALSE; 
    }void CRichMineSplitter::OnMouseMove(UINT nFlags, CPoint point)
    {       
         //将CSplitter类的处理改为由CWnd处理
          //CSplitterWnd::OnMouseMove(nFlags, point);
         CWnd::OnMouseMove(nFlags, point); 
    }
      

  3.   

    2楼的我试了,不过建立一个基于CSplitterWnd的CMySplitterWnd 时,因为向导中没有CSplitterWnd选项,我就选了Generic CWnd做基类,生成后手动修改为CSplitterWnd类,还没有重写函数,但运行出问题啊,连分屏都没生成。定义如下CMySplitterWnd m_wndSplitter1;//原来是直接用CSplitterWnd m_wndSplitter1定义运行没问题啊
    CMySplitterWnd m_wndSplitter2;
    CMySplitterWnd m_wndSplitter3;生成的CMySplitterWnd 文件.h
    class CMySplitterWnd : public CSplitterWnd
    {
    DECLARE_DYNCREATE(CMySplitterWnd)
    // Construction
    public:
    CMySplitterWnd();// Attributes
    public:// Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMySplitterWnd)
    //}}AFX_VIRTUAL// Implementation
    public:
    virtual ~CMySplitterWnd(); // Generated message map functions
    protected:
    //{{AFX_MSG(CMySplitterWnd)
    // NOTE - the ClassWizard will add and remove member functions here.
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };//////////////////////////////////////////////////
    .cpp文件
    #include "stdafx.h"
    #include "vfsd.h"
    #include "MySplitterWnd.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CMySplitterWndIMPLEMENT_DYNCREATE(CMySplitterWnd, CSplitterWnd)
    CMySplitterWnd::CMySplitterWnd()
    {
    }CMySplitterWnd::~CMySplitterWnd()
    {
    }
    BEGIN_MESSAGE_MAP(CMySplitterWnd, CWnd)
    //{{AFX_MSG_MAP(CMySplitterWnd)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    有点纳闷,直接用CSplitterWnd定义的wndSplitter就可以,怎么就用派生类就不行了,求指教
      

  4.   

    我的错,2楼的
    BEGIN_MESSAGE_MAP(CMySplitterWnd, CWnd)
    这里还没改过来,谢谢啊,搞定了