aspl的笔记 https://bbs.21ic.com/?371398 [收藏] [复制] [RSS]

日志

VC下内存画图和坐标转换竟然不能同时工作?

已有 1550 次阅读2006-6-24 22:24 |个人分类:C/C++|系统分类:原稿与翻译

为了克服闪烁。,采用了内存绘图;


   为了标注方便,  采用了逻辑坐标和屏幕坐标的转换;


  但在VC中的实际情况是:不采用内存绘图,而采用在屏幕DC上直接绘图,坐标转化是成功;但在刷新时有很严重的闪烁,难以忍受;


同时采用内存绘图和在内存中进行坐标转化,则COPY到屏幕上的时候则发生错误;


多次调试也没结果,那位大虾知道告诉下呀?


我最后没办法,采用了内存绘图,标注虽然麻烦点,但总能完成,以下是相关代码:


 /*
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetViewportOrg(0,myViewRect.bottom);
    pDC->SetViewportExt(myViewRect.right, myViewRect.bottom);
    pDC->SetWindowOrg(0,0);
    pDC->SetWindowExt(1000,-1000);
 */
    //内存绘图
    CDC MemDC;
  //内存绘图
    CBitmap  memBitmap;
 CBitmap *pOldBmp = NULL;
 MemDC.CreateCompatibleDC(pDC);
 memBitmap.CreateCompatibleBitmap(pDC,myViewRect.right,myViewRect.bottom);
    pOldBmp = MemDC.SelectObject(&memBitmap);
 MemDC.BitBlt(myViewRect.left,myViewRect.top,
           myViewRect.right,myViewRect.bottom,pDC,0,0,BLACKNESS);  
  
 //设置背景色
    MemDC.SetBkColor(RGB(0,0,0));
 // 留有一定的余量
 myViewRect.top +=30;
 myViewRect.bottom -=30;
    myViewRect.left +=60;
 myViewRect.right -=30;


    DrawCoor(&MemDC,&myViewRect);


    if(TRUE==pDoc->FFTDisplayStatus)
  {
            DrawDisplayFFT(&MemDC,&myViewRect);
  }


 // 恢复余量
 myViewRect.top -=30;
 myViewRect.bottom +=30;
    myViewRect.left -=60;
 myViewRect.right +=30;


 pDC->BitBlt(myViewRect.left,myViewRect.top,
          myViewRect.right,myViewRect.bottom,&MemDC,0,0,SRCCOPY);


 MemDC.SelectObject(pOldBmp);
 MemDC.DeleteDC();
 memBitmap.DeleteObject();


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)