Непостоянное мерцание MFC даже при использовании bitblt

Я испытываю мерцание при вращении прямоугольника, но не при перемещении прямоугольника, хотя я использую ту же функцию показа. Это сценарий планировки пола.

Некоторые изображения для иллюстрации. Красный прямоугольник в центре выделен и перемещен:

Переместить пример

Но при попытке поворота происходит следующее:

Повернуть пример

Код, используемый для поворота прямоугольника:

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(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

Решение

Мне удалось это исправить, заменив функцию 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. Это работает, но это немного не отвечает.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector