我的应用程序基于单文档,我把标题栏和菜单工具栏、状态栏都删除了,用分裂视图模拟各视图,子视图是基于CFormView和CListView,现在遇到问题了,我在客户区模拟的标题栏也画好了,如何实现在自绘的标题栏内移动整个框架呢,比如:
|----|-------------------------|
|  1 |  2                      |
|——|-------------------------|
|    |                         |                         
| 3  |  4                      |
|------------------------------
    我想点击视图1或2就能移动整个框架(包括所有视图),现在只能通过:
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
实现单个视图的移动(仿造标题栏移动信息,在OnNcHitTest响应),此外框架的大小的变化是不是就是处理每个视图的OnSize消息呢?请高手指教!

解决方案 »

  1.   

    你重载MianFrame的OnNcHitTest消息来实现对框架窗口的移动
    每个子窗口的变化就是其相应的OnSize
    这个你可以下断点看一下
      

  2.   

    从开始时就是重载CMainFrame的OnNcHitTest,但是只能实现发消息的子视图的移动,且移动后框架位置还是不变的,移动后的区域为空白!希望高手能解答下?
      

  3.   

    http://blog.sina.com.cn/s/blog_636cc2e20100pz2r.html
    上面是链接,3楼大侠帮忙看下?
      

  4.   

    看了, 明白你的问题了, AfxGetMainWnd()->PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y)); 可以不?
      

  5.   

    已经解决!谢谢诸位!分享下解决方法:
    问题的解释:
        基于对话框的客户区模拟标题栏移动应用程序框架示例很多,但是不适用于基于文档视图结构的程序,所以上述在CMainFrame中实现OnNcHitTest也是不可取的,因为客户区的按键消息都被CView处理,这与基于对话框程序是不一样的;
    问题的解决:
        同样处理按键按下消息,在鼠标移动的消息中用GetWindowRect完成视图相对框架的坐标的获取,然后再利用鼠标按下时传递的视图点坐标,使用MoveWindow函数完成主框架的移动!
      
      

  6.   

    也可以啊,哈哈谢谢木子纵横!原来是我的消息发送有问题,呵呵,这样就能让CMainFrame得到消息了,比我的方法还要简单啊!
      

  7.   

    如果还不行, 把CDialog::OnLButtonDown(nFlags, point)的默认处理可以去掉。 或者根据鼠标是否在你的那些按钮上, 不在, 且还在你要允许移动的rect里, 取消这个默认的处理。
      

  8.   

    ====================================论坛签名==================================

    当您的问题得到解答后请及时结贴.

    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖访问我的blog
    http://blog.csdn.net/muzizongheng