我要在视图窗口上完成一个,用鼠标对图形拖动的效果。用左键选中,拖拽它

解决方案 »

  1.   

    自己写一个类,从CWnd继承,响应其LButtonDown,Mousemove,LButtonUp事件,即可。
      

  2.   


    void CMovingCard::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    if(!m_bMouseDown){
    // 左键按下的标志
    this->m_bMouseDown = true;
    // 左键按下时的鼠标位置
    this->m_ptMouseOrigin = point;
    // 左键按下时自己的位置
    this->GetWindowRect(&m_rtWndOrigin); // 将自己的位置转化为在父窗口内的客户区坐标
    this->m_pParent->ScreenToClient(&m_rtWndOrigin);
    // 更新表示现在自己的位置的变量 m_rtWndNow
    m_rtWndNow = m_rtWndOrigin;
    // 捕获鼠标
    ::SetCapture(this->m_hWnd);
    }

    CWnd::OnLButtonDown(nFlags, point);
    }void CMovingCard::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // 如果鼠标左键处于按下状态
    if(m_bMouseDown){
    // 计算新位置
    m_rtWndNow.OffsetRect(  point.x - m_ptMouseOrigin.x,
    point.y - m_ptMouseOrigin.y);
    // 移动自己
    this->MoveWindow(&m_rtWndNow);
    }

    CWnd::OnMouseMove(nFlags, point);
    }void CMovingCard::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // 如果鼠标处于按下状态
    if(m_bMouseDown){
    // 鼠标按下标志置成 fasle
    this->m_bMouseDown = false;
    // 释放鼠标
    ::ReleaseCapture();
    // 刷新一下
    this->Invalidate();
    }

    CWnd::OnLButtonUp(nFlags, point);
    }