2008년 12월 19일 금요일

[Visual C++]더블 버퍼링 실제 예제


void CWriteView::OnDraw(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);

if (m_nGridX > 0)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);

CBitmap Bitmap, *pOldBitmap;
Bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
pOldBitmap = memDC.SelectObject(&Bitmap);
memDC.PatBlt(0, 0, rect.Width(), rect.Height(), WHITENESS);

CPen pen;
pen.CreatePen(PS_SOLID, 1, RGB(192, 192, 192));
CPen *OldPen = (CPen *)memDC.SelectObject(&pen);

// Grid Y 축 Line 그리기
for (int y = 0; y < rect.bottom; y = y + m_nGridY)
{
memDC.MoveTo(rect.left, y); memDC.LineTo(rect.right, y);
}

// Grid X 축 Line 그리기
for (int x = 0; x < rect.right; x = x + m_nGridX)
{
memDC.MoveTo(x, rect.top); memDC.LineTo(x, rect.bottom);
}

pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);

memDC.SelectObject(pOldBitmap);
memDC.SelectObject(OldPen);
}
}

위의 예제는 지금 수행 중인 개인 프로젝트 중 사용한 더블 버퍼링이다.
더블 버퍼링을 이용해서 격자 무늬를 배경에 그리도록 하는 것이다.
int 변수 m_nGridX, m_nGridY의 값이 높아지면 격자의 크기도 커진다.

OnDraw 함수에 기술하여 사용하고 있으며 실제 사용가능한 code이다.


//------------------------------------------------------------------------
야휴 블로그에서 옮겨온 data입니다.

0 개의 댓글:

댓글 쓰기