即使使用bitblt,MFC也会出现闪烁

时间:2014-05-14 09:39:23

标签: c++ winapi mfc bitblt

我在旋转矩形时遇到闪烁,但在移动矩形时却没有,即使我使用相同的show函数。这是一个场地布局场景。

一些图片来说明。选中并移动中心的红色矩形:

Move example

但是当试图旋转时会发生以下情况:

Rotate example

用于旋转矩形的代码:

m_pDrawRect->SetRelativeAngle(point, m_pntLast, RECT_SELECTED | RECT_RECURSIVE);
m_pDrawRect->SetRelativePosition(point, m_pntLast, RECT_SELECTED |RECT_RECURSIVE);
CRecordDC dcRecord(m_pMemDC->GetDC(this, TRUE));
m_pDrawRect->Draw(&dcRecord, RECT_SELECTED);
m_pMemDC->Show(this);

show function:

Show(CWnd *pWnd)
{
CDC *pMainWnd=pWnd->GetDC();
pMainWnd->BitBlt(rcPaint.left, rcPaint.top, rcPaint.Width(), rcPaint.Height(), m_pMemDC, rcPaint.left, rcPaint.top, SRCCOPY);
pWnd->ReleaseDC(pMainWnd);

1 个答案:

答案 0 :(得分:0)

我设法通过将show函数替换为:

来修复它
CRect rcPaint;
this->GetClientRect(rcPaint);
CDC *pDCOld = m_pMemDC->GetDC(this, TRUE);
CDC pDCTemp;
pDCTemp.CreateCompatibleDC(pDCOld);
CMemDC memDC(pDCTemp, rcPaint);
CDC* pDC = &memDC.GetDC();
pDC->BitBlt(rcPaint.left, rcPaint.top, rcPaint.Width(), rcPaint.Height(), pDCOld,
rcPaint.left, rcPaint.top, SRCCOPY);
Invalidate();

该对象引用当前的CView对象。这有效,但有点反应迟钝。