||
为了克服闪烁。,采用了内存绘图;
为了标注方便, 采用了逻辑坐标和屏幕坐标的转换;
但在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();