控件移动问题
窗体中CStatic *mystatic=new CStatic();
mystatic->Create后,如何在点击该控件并同时按住ctrl键后,能够拖动其在
对话框中移动?还请不吝赐教!

解决方案 »

  1.   

    处理鼠标事件WM_LBUTTON,WM_MOUSEMOVE,WM_LBUTTONUP,在WM_LBUTTON中记录起来,在WM_MOUSEMOVE中MoveWindow,在WM_LBUTTONUP中结束移动。
      

  2.   

    假设有一对话框 CDlg
    首先要记录控件的区域 CRect rc;CDlg::OnLButtonDown
    if (rc.PtInRect(pt))
    {
         m_bCapture = TRUE;   //表示已经点中该控件
         SetCapture();
    }CDlg::OnMouseMove
    {
    if (m_bCapture)

      控件.MoveWindow(...);
    }
    }CDlg::OnLButtonUp
    {
    m_bCapture = FALSE;
    ReleaseCapture();
    }
      

  3.   

    private:
    POINT m_ptOld;void CDragButton::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    m_ptOld = point;
    ClientToScreen(&m_ptOld); CButton::OnLButtonDown(nFlags, point);
    }void CDragButton::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    POINT ptNew = point;
    ClientToScreen(&ptNew); if (ptNew.x != m_ptOld.x || ptNew.y != m_ptOld.y)
    {
    CRect rect;
    GetWindowRect(&rect);
    GetParent()->ScreenToClient(&rect);
    rect.OffsetRect(ptNew.x - m_ptOld.x, ptNew.y - m_ptOld.y);
    MoveWindow(&rect);
    }
    CButton::OnLButtonUp(nFlags, point);
    }