我在浮动窗口里加入CListCtrl控件,拖动里面的icon到其他对话框,但是当鼠标离开浮动窗口时,浮动窗口并没有隐藏回去,知道鼠标放开时才隐藏。我想要的效果是当鼠标离开浮动窗口(无论是否是拖动操作),浮动窗口隐藏。请问各位高手,怎么做啊?我用了ShowControlBar(),无论参数怎么设置,都不行啊!

解决方案 »

  1.   

    使用TrackMoveEvent()发送WM_MOUSELEAVE消息,然后在
    OnMouseLeave()函数下隐藏浮动窗口
    ShowControlBar( &m_Bar, FALSE, FALSE );或者响应WM_MOUSEMOVE消息,再次函数下,判断鼠标是否离开
    浮动窗口,是,就隐藏
    m_Bar.GetWindowRect(&rc);
    if(!rc.PtInRect(point))
    ShowControlBar( &m_Bar, FALSE, FALSE );
      

  2.   

    CWnd::OnMouseLeaveThe framework calls this member function when the cursor leaves the client area of the window specified in a prior call to TrackMouseEvent. 
    afx_msg void OnMouseLeave();
     mimlxf's solution are good
      

  3.   

    TrackMoveEvent,增加OnMouseLeave的处理,但是看样子,楼主可能用了SetCatpure,那么隐藏窗口之前的ReleaseCapture需要处理好了。
      

  4.   


    三楼的兄弟:我确实用了SetCatpure,但是当鼠标离开浮动窗口时,我还需要用SetCatpure来进行鼠标捕获啊,还不能ReleaseCapture啊!这怎么办啊!
      

  5.   


    我用的是OnMouseMove来判断鼠标位置,这时用ShowControlBar()来设置,浮动窗口并不回收,三楼说我是用了SetCapture()的原因,但是当鼠标离开浮动窗口后,我还需要进行鼠标捕获,不能ReleaseCapture(),怎么办啊?
      

  6.   


    我用的是OnMouseMove来判断鼠标位置,这时用ShowControlBar()来设置,浮动窗口并不回收,三楼说我是用了SetCapture()的原因,但是当鼠标离开浮动窗口后,我还需要进行鼠标捕获,不能ReleaseCapture(),怎么办啊?
      

  7.   

    网上有很多这样的例子,比如:上google搜索<VC界面+悬浮+停靠窗口+很经典的代码>就有自动隐藏的效果。如果不想自己下,留下email,我发给你。
      

  8.   

    我就是用csdn中有关浮动窗口的代码做的!请你认真看一下我遇到的问题,不是我不会做浮动窗口,是在浮动窗口中的CListCtrl控件中的Item拖动到其他窗口时,浮动窗口不回收。如果不是拖动操作是很正常的!
      

  9.   

    你既然SetCapture了,就会有WM_MOUSEMOVE消息给你,判断鼠标不在窗口内就把窗口隐藏就可以了。
    不过你这样做有个问题,如果不小心把icon拖出窗口,然后窗口没了,想把icon拖回来怎么办?
      

  10.   

    我就是这样做的,在OnMouseMove中判断鼠标位置,当移出窗口时,调用ShowControlBar( &m_Bar, FALSE, FALSE ); 但是浮动窗口并没有隐藏啊?这个问题困扰我很久了。请您帮帮忙啊!谢谢我的程序不需要再把icon拖回来,呵呵。
      

  11.   

    我不用MFC,API写了个Hello World试了一下,移出窗口ShowWindow是可以隐藏窗口的,ShowControlBar为什么不工作就不知道了,估计得跟进去看了。
      

  12.   


    您是拖动操作吗?并且在开始拖动时SetCapture,,在鼠标Up时ReleaseCapture?
      

  13.   

    是拖动操作,鼠标按下SetCapture,鼠标放开ReleaseCapture,这个过程中改变窗口大小倒是没试过,上班没时间,回家试试。