小弟我想做一个鼠标画图程序,可是在画线的时候,总是画一条新线就把原来的旧线刷新了。相关代码如下:
void CE1View::OnLButtonDown(UINT nFlags, CPoint point) 
{
bCaptured=FALSE;
m_pointFirst=point;

CView::OnLButtonDown(nFlags, point);
}void CE1View::OnMouseMove(UINT nFlags, CPoint point) 
{
if(!bCaptured){
    CDC* pDC = GetDC();
OnPrepareDC(pDC);
Invalidate();
UpdateWindow();
pDC->MoveTo(m_pointFirst.x,m_pointFirst.y);
pDC->LineTo(point.x,point.y); ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}void CE1View::OnLButtonUp(UINT nFlags, CPoint point)
{
bCaptured=TRUE;
m_pointSecond=point;
// drawline(m_pointFirst,m_pointSecond);
    
CView::OnLButtonUp(nFlags, point);
}
请高手们多多指教!

解决方案 »

  1.   

    顺便也给我一份
    [email protected]
      

  2.   

    如何用鼠标拉矩形选取画元?谢谢各位!在线等待! (zswking ) 没人能回答吗?
      

  3.   

    正规的话,要做一个直线类继承CObject
    在按下的时候告诉系统开始画图,调用直线类的NewPoint函数
    来确定直线的起点
    在移动过程中要调用直线类的MoveAt函数注意:这个函数要用异或笔来画,
    在抬起时再做一些相关操作
      

  4.   

    屏幕没有一点变化,例如 放大,缩小,移动,被其他窗口遮盖就发送ON_PAINT 消息。OnDraw是这个消息的接受者,在这里画就不会消失了。
    自己写代码吧
      

  5.   

    void CE1View::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    bCaptured=FALSE;
    m_pointFirst=point;

    CView::OnLButtonDown(nFlags, point);
    }void CE1View::OnMouseMove(UINT nFlags, CPoint point) 
    {
    if(!bCaptured){
        CDC* pDC = GetDC();
    OnPrepareDC(pDC);
    //UpdateWindow();
    pDC->MoveTo(m_pointFirst.x,m_pointFirst.y);
    pDC->LineTo(point.x,point.y);                  Invalidate(); ReleaseDC(pDC);
    }
    CView::OnMouseMove(nFlags, point);
    }void CE1View::OnLButtonUp(UINT nFlags, CPoint point)
    {
    bCaptured=TRUE;
    m_pointSecond=point;
    // drawline(m_pointFirst,m_pointSecond);
        
    CView::OnLButtonUp(nFlags, point);
    }
    try again
      

  6.   

    cuterain大侠,还是不行呀!要做到鼠标任意拖动的效果,不刷新的话就是满屏幕的线呀!可是一刷新以前画的线也没有了!头晕呀!
      

  7.   

    我想应该是这样的吧:当再次画图时,程序会调用CView::OnDraw()函数
    所以上次画的图,也被消掉,如果还想要保留上次
    的线,必须将上次画图的代码在CView::OnDraw()
    中体现出来.若不这样,不仅再次画图时,上次的图
    会消失,而且当窗口发生变化时,它也会消失.
      

  8.   

    序列化,要涉及Cdocument类中的代码。我不懂VC,只知一点。
      

  9.   

    void CRpwt2View::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    m_lbtdown = true;//mouse down
    startpoint=point;//起始为mouse down 的 point
    oldpoint=startpoint;

    CScrollView::OnLButtonDown(nFlags, point);
    }void CRpwt2View::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default   if(m_lbtdown)
       {
        int oldmode;
    endpoint=point;
            CClientDC*pDC = new CClientDC(this);

           
    if (m_drawtype == 1)
    {
    oldmode = pDC->GetROP2();
    pDC->SetROP2(R2_NOT);
    pDC->MoveTo(startpoint);
    pDC->LineTo(oldpoint);
                pDC->MoveTo(startpoint);
    pDC->LineTo(point);
    oldpoint=point;
                pDC->SetROP2(oldmode);
    }
    delete pDC;
    }
         

    CScrollView::OnMouseMove(nFlags, point);
    }
    鼠标任意拖动的效果
      

  10.   

    用异或笔!!!
             COLORREF XorColor=pDC->BkColor() ^ "笔色";
    int oldmode = pDC->GetROP2();
    oldpen = pDC->SelectObject(&pen);
    pDC->SetROP2(R2_XORPEN);