大家好,如题问一下,怎样让对话框只能在指定位置拖动?就像搜狗输入法的悬浮窗口一样,不管怎么样只能在屏幕的四周拖动,而不能拖出屏幕外面去,就好像有一个墙堵着一样。
怎样才能做出这种效果呢??
谢谢了。

解决方案 »

  1.   

    有一个笨点的方法,就是在WM_MOUSEMOVE中计算鼠标的位置来达到控制的目的,因为你在拖动时一定会是用WM_MOUSEMOVE的。
      

  2.   

    呃,检测控件位置呀,比如屏幕,得到相对窗体坐标再转化成相对屏幕,左上角相对屏幕坐标知道了,控件大小也知道,阻止移出去还不简单?在onMove(大概这个方法)里判断一下就成了(有个参数能得到当前坐标,自己查吧)。
      

  3.   

    是WM_MOVE
    检测窗口矩形位置,然后跟屏幕位置做判断
      

  4.   

    在OnLeftButtonDown()中 限制 鼠标的移动范围就可以了~~我的方法有点笨,
    3# 的方法应该可以~!
      

  5.   

    试试处理 WM_GETMINMAXINFO 消息
      

  6.   

    是响应WM_MOVING消息,not WM_MOVE;WM_MOVING消息在Window里面
    void CTest1Dlg::OnMoving(UINT fwSide, LPRECT pRect) 
    {
    int w=pRect->right-pRect->left;
    int h=pRect->bottom-pRect->top;
    pRect->left=pRect->left<200?200:pRect->left;
    pRect->top=pRect->top<200?200:pRect->top;
    pRect->right=pRect->left+w;
    pRect->bottom=pRect->top+h;
    CDialog::OnMoving(fwSide, pRect);

    // TODO: Add your message handler code here

    }
    测试通过
      

  7.   

    WM_WINDOWPOSCHANGED/WM_WINDOWPOSCHANGING都可以的