我用RGN创建的圆形窗口,但是没有办法脱动它,怎么设置拖动区域?

解决方案 »

  1.   

    这里可能有许多方法.
    我认为最简单的方法就是通过
    OnMouseMove()
    OnLButtonDown()
    OnLButtonUp()
    这几个鼠标消息来自己移动窗口.具体方法就直接看下面的代码好了void CXXXX::OnLButtonDown(UINT nFlags, CPoint point)
    {
     if(IsInRect(point,&m_TitleRect)) // 如果point在这个拖动窗口的区域内
     {

        m_bMoveWindow=TRUE;
        ClientToScreen(&point); // 这一步非常关键,它将为后面正确的计算提供数据
        OldPoint=point;
        SetCapture();    
     }
    }void CXXXX::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
        
    if(m_bMoveWindow)
    {
    RECT WindowRect;
    ClientToScreen(&point); //  同样的,必须得到绝对坐标才能正确的计算窗口的移动
    if(point.x==OldPoint.x && point.y==OldPoint.y)
                      return;
    GetWindowRect(&WindowRect);
    WindowRect.left+=point.x-OldPoint.x;
    WindowRect.right+=point.x-OldPoint.x;
    WindowRect.top+=point.y-OldPoint.y;
    WindowRect.bottom+=point.y-OldPoint.y;
    MoveWindow(&WindowRect);
    OldPoint=point;

    }

    CDialog::OnMouseMove(nFlags, point);
    }void CNiceNoteDlg::OnLButtonUp(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
       m_bMoveWindow=FALSE;
       ReleaseCapture();    CDialog::OnLButtonUp(nFlags, point);
    }