Code

WinAPI 더블 버퍼링

낭니 2020. 5. 16. 23:01

더블버퍼링 (스왑체인)

* DC를 2개를 만들어서 바꿔가며 디스플레이 함.

* memory DC / Compatible DC

메모리 DC에서 그림을 그리고 콤페터블 DC에서 메모리 DC에서 그린 그림을 복사해서 가져가서 디스플레이 함.

hDC = GetDC(hWinMain);

hMemDC = CreateCompatibleDC(hdc);

hBit => 도화지 = CreateCompatableBitmap(hdc,화면가로,화면세로);

* hBit 도 DlelteObject 로 반환해줘야 함.

hOldBit => 이전 도화지 저장 = SelectObject 의 반환값을 저장할 것이므로 함수를 만들지 않아도 됨.

* Old 를 저장하는 이유 -> 윈도우 운영체제에서 지정한 기본값을 보존시키기 위해.

 

WM_Paint : (<- 여기에서 hdc를 스왑해줌.)

BitBlt(hdc, 0, 0, 화면가로크기, 화면세로크기, hMemDC, 0, 0, SRCCOPY); <- Memdc 에서 hdc로 복사해서 띄워주는 과정.

SRCCOPY = 소스를 카피함.

 

* Timer (타이머) - 일정 틱마다 신호를 발생시킨다. (1/1000초 = 1000이 1초임.)

WM_TIMER 메세지가 발생함.

SetTimer() hwnd, 타이머 넘버, 틱 수, NULL

KillTimer() 타이머 넘버로 없앰. 반드시 킬해줘야 함.