-1

同じ表示機能を使用しているにもかかわらず、四角形を回転させるとちらつきが発生しますが、四角形を移動するとちらつきが発生しません。フロアレイアウトのシナリオです。

説明するためのいくつかの画像。中央の赤い四角形が選択され、移動されます。

移動例

しかし、回転しようとすると、次のことが起こります。

回転の例

長方形を回転させるために使用されるコード:

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);
4

1 に答える 1

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 オブジェクトです。これは機能しますが、わずかに反応しません。

于 2014-05-15T10:08:43.790 に答える