如题

解决方案 »

  1.   

    重载OnSetCursor()return true 就可以了、
      

  2.   

    使用XOR模式画,在画新的巨型之前先用原来数据再画一次,这样原来的巨型就被消掉,这种方法不用刷新窗口的背景,也就没有闪烁了。
      

  3.   

    我的代码
    void CPdaMapClientView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    if(m_sb.OutInModelFlag!=-1 && m_sb.DragFlag)
    {
    RECT rect;
    rect.left=m_sb.StartPoint.x;
    rect.top=m_sb.StartPoint.y;
    rect.right=m_sb.MovePoint.x;
    rect.bottom=m_sb.MovePoint.y;
    //InvalidateRect(&rect); //擦掉以前的矩形
    //UpdateWindow(); 太闪烁
    CDC *pDC=GetDC();
    pDC->SetROP2(R2_XORPEN); //原来矩形擦掉
    pDC->Rectangle(&rect);
    pDC->SetROP2(R2_MASKPEN);
    pDC->Rectangle(m_sb.StartPoint.x,m_sb.StartPoint.y,point.x,point.y);
    ReleaseDC(pDC);
    m_sb.MovePoint=point; //记录当前位置,以便下次擦除
    }
    CView::OnMouseMove(nFlags, point);
    }可是有问题我的视窗口显示了一副图片,我要在图片上以矩形选择某个范围
    不能将图片擦掉,不能闪烁
      

  4.   

    void CPdaMapClientView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    if(m_sb.OutInModelFlag!=-1 && m_sb.DragFlag)
    {
    RECT rect;
    rect.left=m_sb.StartPoint.x;
    rect.top=m_sb.StartPoint.y;
    rect.right=m_sb.MovePoint.x;
    rect.bottom=m_sb.MovePoint.y;
    //InvalidateRect(&rect); //擦掉以前的矩形
    //UpdateWindow(); 太闪烁
    CDC *pDC=GetDC();
    pDC->SetROP2(R2_XORPEN); //原来矩形擦掉
    pDC->Rectangle(&rect);
    //pDC->SetROP2(R2_MASKPEN); //继续用XORPEN
    pDC->Rectangle(m_sb.StartPoint.x,m_sb.StartPoint.y,point.x,point.y);
    ReleaseDC(pDC);
    m_sb.MovePoint=point; //记录当前位置,以便下次擦除
    }
    CView::OnMouseMove(nFlags, point);
    }
      

  5.   

    to FFXI(黑):还是不行可以这样说,先画一条线在视窗口上,不管视窗口背景显示的是什么,然后
    如何再画一条线将原来的线擦除
      

  6.   

    用内存DC可以,先CreateCompatibleDC()创建DC后,在上面画,用到时拷贝上去,可以保证不闪烁,,,你也可以用背景色重新画矩形,这样就搽去原先的矩形了
      

  7.   

    .h:
    private:
    POINT spt; //开始点
    BOOL dragflag; //鼠标按下标志
    POINT mpt; //移动点
    .cpp:
    void CMfcshowpicView::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    dragflag=TRUE;
    spt=point;
    mpt=point;
    CView::OnLButtonDown(nFlags, point);
    }void CMfcshowpicView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    if(dragflag)
    {
    CDC *pDC=GetDC();
    RECT rect;
    rect.left=spt.x;
    rect.top=spt.y;
    rect.right=mpt.x;
    rect.bottom=mpt.y;
    pDC->SetROP2(R2_XORPEN);
    pDC->Rectangle(&rect); 
    pDC->Rectangle(&rect); //擦不掉
    pDC->SetROP2(R2_MASKPEN);//设置成该模式才不会将矩形区域里的图片象素擦掉
    pDC->Rectangle(spt.x,spt.y,point.x,point.y);
    mpt=point;
    ReleaseDC(pDC);
    }
    CView::OnMouseMove(nFlags, point);
    }void CMfcshowpicView::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    dragflag=FALSE;
    CView::OnLButtonUp(nFlags, point);
    }