比如我分成左右两边.我想让左边有最小限制.但网上找的不成功.好多copy.转载!!!!都说要重载onmousemove但实事上我无法向继承自csplitterwnd的类加入消息处理...不知道怎么回事.因为在类视图上右击没有 add message halder项.手动添加也不行.要报错. 哪个能给个实现了的示例?

解决方案 »

  1.   

    重载一个自己的CSplitterWnd类,响应WM_MOUSEMOVE消息。首先在类视图中,对项目右键,选择新增加一个类。在基类列表框中发现没有CSplitterWnd,真无奈啊,只好选择generic CWnd了。输入我们自己的类名CMySplitterWnd。创建成功后,在CMySplitterWnd的头文件和实现文件中,将CWnd全部该成CMySplitterWnd就可以了。记得不要漏掉一个CWnd,也不多,可以直接全局替换就行了。保存一下,然后你会发现add message handler有用了。然后增加WM_MOUSEMOVE消息,根据需要指定你的范围:void CMySplitterWnd::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    if (point.x > 100)
    {
    CSplitterWnd::OnMouseMove(nFlags, point);
    }
    }以上我指定了最小距离为100,根据需要自己设置吧:)
      

  2.   

    class CMySplitterWnd : public CSplitterWnd
    {
    DECLARE_MESSAGE_MAP()
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    };BEGIN_MESSAGE_MAP(CMySplitterWnd, CSplitterWnd)
    ON_WM_MOUSEMOVE()
    END_MESSAGE_MAP()void CMySplitterWnd::OnMouseMove(UINT nFlags, CPoint point)
    {
    if (point.x < 100) point.x = 100; CSplitterWnd::OnMouseMove(nFlags, point);
    }