본문 바로가기
개발

메모리 DC를 이용한 더블 버퍼링

by 솜씨제이 2007. 3. 31.

화면에 이미지나 도형, 텍스트 등 여러가지를 출력하다 보면 깜박거리는 현상을 보게 된다. 한 번 출력하고 말 것이라면 크게 문제가 안 될 수 있지만 지속적으로 출력하는 상황에서는 깜박거림은 피하고 싶은 문제 중 하나이고 가장 쉽고 일반적인 해결책은 더블 버퍼링이다.

다음은 메모리 DC를 이용한 더블 버퍼링 방법이다.

1. 출력하려는 크기의 비트맵과 메모리 DC를 생성하고 메모리 DC에 생성된 비트맵을 선택한다.

    HBITMAP hbmMem = CreateCompatibleBitmap(hdc, 48, 48);
    HDC hdcMem = CreateCompatibleDC(hdc);
    HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, hbmMem);

2. 생성한 메모리 DC(hdcMem)로 그리려는 내용을 출력한다.

3. 메모리 DC의 내용을 출력할 DC로 복사한다.

    BitBlt(hdc, 0, 0, 48, 48, hdcMem, 0, 0, SRCCOPY);

4. 메모리 DC와 비트맵을 정리한다.

    SelectObject(hdcMem, hbmOld);
    DeleteObject(hbmMem);
    DeleteDC(hdcMem);

댓글