一个绘图的问题,高手请进!
我在OnDraw里面加了这样一段代码:
for(int i=0;i<200;i=i+3)
{
pDC->Rectangle (&CRect(50+i,50+i,100+i,100+i));
}
然后在CMyView::OnMouseMove里面加了一句Invalidate();
但是这样在鼠标移动的时候会屏幕导致闪烁,我就
把OnDraw里面的代码改成了这样 :
CDC dc;
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap = 0;
CRect rect;
pDC->GetClipBox(client);
dc.CreateCompatibleDC(pDC);
bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
pOldBitmap = dc.SelectObject(&bitmap);
for(int i=0;i<200;i=i+3)
{
pDC->Rectangle (&CRect(50+i,50+i,100+i,100+i));
}
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
&dc, 0, 0, SRCCOPY);
可是为什么这样还是会导致闪烁呢,后来我把
CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
改成了这样:
CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
if (cs.lpszClass == NULL)
cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS);
return TRUE;
}
这样改了之后闪烁就消失了,可又这是为什么呢。