我在单文档视图中画个矩形,用鼠标拖着画,要求一直显示着这个矩形,同时屏幕不闪烁,我在OnMouseMove()里加的pDC->Draw3dRect(rect, 0, 0),画出一串,能不能像有些软件一样,只显示当前的矩形

解决方案 »

  1.   

    你在OnMouseMove还应该刷新包含画出矩形的那部分区域。
      

  2.   

    两个办法
    一:用双缓冲
    二:SetROP2
      

  3.   

    用双缓冲吧,给个示例代码:
    void CYourClass::OnDraw(CDC* pDC)

    //////////////////////////////////////////////////////////
    // 初始化双缓冲绘图相关变量
    CDC memDC;
    CBitmap memBitmap;
    memDC.CreateCompatibleDC(pDC);
    memBitmap.CreateCompatibleBitmap  (pDC,BoardWidth,BoardHeight);//BoardWidth,BoardHeight应要变吧,还是动态获取的
    CBitmap*pb= memDC.SelectObject(&memBitmap);
    ///////////////////////////////////////////////////////////
    // 在memDC上画你的画
    // eg:DrawRect(&memDC);/////////////////////////////////////////////////////////////////
    //往屏幕绘图及清理内存设备资源
    pDC->BitBlt(0,0,BoardWidth,BoardWidth,&memDC,0,0,SRCCOPY); 
    memDC.SelectObject(pb);
    memDC.DeleteDC();
    memBitmap.DeleteObject(); 
      

  4.   

    BoardWidth,BoardHeight);//BoardWidth,BoardHeight应要变吧,还是动态获取的不好意思,代码是我以前的工程里拷的,上边的注释是以前的,不要引起你的误解呀..:-)
      

  5.   

    zdl1016(探路者) 的代码已经好详细了,
    刷新的时候记着InvalidateRect(&rect,FALSE);
      

  6.   

    OnMouseMove()中刷新你要的那部分区域