在lButtonDown,OnMouseMove,LButtonUp中处理

解决方案 »

  1.   

    图象的拖曳类似于窗口,可用同样的方法解决,可参考 周长发的《精通VISUAL C++ 图象编程》
      

  2.   

    方法1:
    使用 CRectTracker 类(用法见 MSDN)方法2:
    自己处理鼠标的 down,move,up 消息,在窗口上绘制
      

  3.   

    《精通VISUAL C++ 图象编程》
    请问那里有?
      

  4.   

    gboy(boy) 能不能具体说一下第二种方法,谢谢!
      

  5.   

    CPoint m_StartPoint,m_EndPoint;
    BOOL m_bDown;
    .....
    LButtonUp()
    {
    m_bDown=FALSE;
    pDC->DrawFocusRect(CRect(m_StartPoint,m_EndPoint));///如果想在操作完后,屏幕上还保留选择的区域时,就不要执行本行。
      
    }
    LButtonDown()
    {
     m_StartPoint=point;
     m_EndPoint=point;
     m_bDown=TRUE;
    }
    MouseMove()
    {
      pDC->DrawFocusRect(CRect(m_StartPoint,m_EndPoint));
      m_EndPoint=point;
      pDC->DrawFocusRect(CRect(m_StartPoint,m_EndPoint));
    }
      
      
      

  6.   

     对不起!在OnMouseMove()
    中忘了加上 if(m_bDown) 条件
      

  7.   

    to jupiter_lwm(随风而逝)在这里只能简单的写一下
    1、CMyView::OnLButtonDown(...)
       {
            SetCapture();
            m_bFlag=true;
       }
    2、CMyView::OnMouseMove(...)
       {
         if(GetCapture()==m_hWnd && m_bFlag)
         {
             // 使用异或模式划线 (在同一位置绘制两次,线会被擦除)
             CDC* pDC=GetDC();
             pDC->SetROP2(R2_NOTXORPEN);
             // erase old line/shape  这里的细节要靠你自己了 :-)
             ..........  
             // draw new line/shape
             .........         ReleaseDC(pDC);
         }
         ...............
      }3、CMyView::OnLButtonUp(...)
      {
          bFlag=false;
          ReleaseCapture();
         ...............
       }