달력

10

« 2018/10 »

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  

'깜박임'에 해당되는 글 1

  1. 2010.05.10 API-더블 버퍼링
2010.05.10 20:21

API-더블 버퍼링 프로그래밍/API2010.05.10 20:21






api에서 paint를 호출 할때 사용하는 InvalidateRect 함수는 특정 영역(또는 전 화면)을 지우고 다시 그려주는 일을 하게 되는데, 그 순서는

기존의 이미지 -> 특정 영역(모든 영역)을 화면에서 지운다 -> 다시 그려준다

(물론 그려주기 위해서 MemDC가 필요 하다.)
이런 구조를 지니게 되는데,

그렇기 때문에 가끔씩 느껴지는 깜박임 현상을 보게 된다.

그때 그 문제를 해결하기 위해서 더블 버퍼링이라는 기술을 사용하게 되는데,

따로 더블버퍼링 함수를 제공한다거나 하는것이 아니기 때문에 처음엔 많이 해맬 수 있다.

기존에 영역을 지우고 다시 그려주는 것이 아닌,

hdc가 뿌려준 기존의 화면 -> 다음에 그려줄 이미지를 BackDC에 임시 저장 -> BackDC에 내용을 MemDC에 삽입한다. -> MemDC에 내용을 hdc로 넘긴다. -> hdc에서 화면에 뿌려준다.

의 순서로 돌아간다.

그렇기 때문에 화면의 깜박임 현상을 제거 할 수 있는데, 그리고 지우는게 아니라

그리고 덮허씌운다, 라는 표현이 맞을것 같다.

예제를 보도록 하자.

이 처럼, 해주면 된다.

여기서 더이상 어떻게 설명을 해야 할지 모르겠다.

이해가 가지 않는다면, bitmap을 그릴때 어떤식으로 그리는지 부터 다시 파악하는 것을 추천한다.

프로그램을 실행하면, 검은 화면에 깜박이지 않는 어떠한 리소스가 좌우로 움직이는 것을 확인 할 수 있다.


// 실행 화면

'프로그래밍 > API' 카테고리의 다른 글

API-애니메이션  (0) 2010.05.10
API-PlaySound  (0) 2010.05.10
API-더블 버퍼링  (0) 2010.05.10
API-ChildWnd  (0) 2010.04.24
API-WindowLong  (0) 2010.04.24
API-WNDCLASSEX  (0) 2010.04.24
Posted by 안식의후크