现在遇到的问题就是模仿鼠标移动时图像的动感,我查了一些资料,利用了CDC的SetROP2(R2_NOTXORPEN)把像素设置为“异或模式”,但是这样做的话,当鼠标移动到已经画好的图像时,会把原先的图像也擦掉...
    所以现在想问一下有没有更加好的办法模仿鼠标移动时图像的动感,并且可以不影响原来已经画好的图像?

解决方案 »

  1.   

    自己在 OnPaint里面根据鼠标的位置绘制
      

  2.   


    不懂?我在OnMouseMove函数中发送消息WM_PAINT来调用OnPaint函数,这样子别说影响原先的图像了,连动感也没有了?贴一下我的代码
    void CGraphicView::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    if(m_bDraw)
    {
    //CClientDC dc(this);
    int nDrawMode = dc.SetROP2(R2_NOTXORPEN);
    DrawGraphics(&dc,m_cGph);
    dc.SetROP2(nDrawMode);
    m_cGph.m_ptEnd=m_ptOrigin;
    DrawGraphics(&dc,m_cGph);
    } OnPrepareDC(&dc);
    OnDraw(&dc);
    // Do not call CScrollView::OnPaint() for painting messages
    }void CGraphicView::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 //if(m_bDraw)
    //{
    // CClientDC dc(this);
    // int nDrawMode = dc.SetROP2(R2_NOTXORPEN);
    // DrawGraphics(&dc,m_cGph);
    // SendMessage(WM_PAINT);
    // dc.SetROP2(nDrawMode);
    // m_cGph.m_ptEnd=point;
    // DrawGraphics(&dc,m_cGph);
    //}
        if(m_bDraw)
    {
            UpdateWindow();
        m_ptOrigin = point;
    }
    CScrollView::OnMouseMove(nFlags, point);
    }