이미지를 처리하는 경우... 보통 WM_PAINT 메시지 처리부에
리소스나 파일에서 DDB를 생성하고 화면에 뿌려주는 작업을 한다.
그런데 이경우 작은 파일의 경우는 별 상관이 없으나.
크기가 큰 파일의 경우 로딩하고 뿌리는 데 상당한 부하가 일어난다.
실제로 노트북의 경우 크기 1024*680 정도의 파일을 읽어서
화면 크기만 줄였다 늘였다 해도(WM_PAINT 메시지 발생)
상당히 버벅거림을 볼 수 있었다.
그래서 미리 DDB를 저장하는 변수를 만들어서 DDB 로딩을 먼저 시키고
그 핸들값을 저장한 후 처리해봤다. 이 경우 유효한 DDB가 있는 상태이니
WM_PAINT에서는 그냥 로딩은 하지 않고 뿌리는 작업만 하면 된다.
부하가 없어졌다. 이 결과로 비추어 볼때
화일에서 DDB를 생성하는 작업이 상당한 오버로드를 가진 듯 하다.
큰 파일을 스크롤 처리할 경우 이런 식으로 반드시 처리해야 될 듯 싶다.
대상은 동일하고 스크롤링에 따라 표시할 화면만 잘 맵핑시키면 된다.
그리고 그래픽 파일 로딩 프로그램 제작시....메인윈도우의 브러쉬를
NULL_BRUSH로 설정하는 게 현명하다.
백그라운드 이미지를 지우는 작업이 일어나지 않으므로 무의미한
깜빡거림이 사라진다.. 이 경우 물론 WM_PAINT 메시지에서
전체 클라이언트 영역에 대한 처리를 해야 한다.
'API' 카테고리의 다른 글
동적 링크 라이브러리에서 TLS(스레드 로컬 저장소) 사용하기 (1) | 2008.09.08 |
---|---|
MAKEINTRESOURCE 매크로 분석 (1) | 2008.09.08 |
win32/DynamicLinkLibrary(dll) - Good (0) | 2008.09.05 |
API 이용 MDI 구현 - 발췌 (1) | 2008.09.04 |
Dll 재배치, 로딩, 구현 (0) | 2008.09.03 |
윈도우 메시지 종류 및 큐잉, 비큐잉 메시지 (0) | 2008.09.01 |
WM_PAINT의 비밀...? - 메시지 큐잉 관련 좋은 글....비큐 메시지/큐 메시지 정확한 구분 (0) | 2008.08.31 |