티스토리 뷰
화면에 이미지나 도형, 텍스트 등 여러가지를 출력하다 보면 깜박거리는 현상을 보게 된다. 한 번 출력하고 말 것이라면 크게 문제가 안 될 수 있지만 지속적으로 출력하는 상황에서는 깜박거림은 피하고 싶은 문제 중 하나이고 가장 쉽고 일반적인 해결책은 더블 버퍼링이다.
다음은 메모리 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);
다음은 메모리 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);
'기억하자정보 > 기타' 카테고리의 다른 글
리눅스 파일 내부 문자열 교체 (0) | 2012.07.26 |
---|---|
CURL 사용할때..|작성자 신쥐 (0) | 2009.10.24 |
[펌]리눅스 명령어 팁 (2) | 2007.02.02 |
Von Neumann & Harvard Architecture (0) | 2006.12.18 |
Von Neumann architecture and Harvard architecture (0) | 2006.12.18 |
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.