콘트롤들의 위치나 크기를 변경하고자 할 때 통상 SetWindowPos()나 MoveWindow() 함수를 이용합니다.
그런데 이 함수들은 각각의 콘트롤들이 개별적으로 그려지기 때문에 화면 깜박임이 심합니다.
이럴때 BeginDeferWindowPos(), DeferWindowPos(), EndDeferWindowPos()라는 Window API 함수를 써보세요. 자세한 사용법은 Help를 보시면 되지만 간단히 요약하면
HDWP hdwp = ::BeginDeferWindowPos (2);
::DeferWindowPos (hdwp, ctrl1.GetSafeHwnd (), HWND_TOP,
Rect1.left, Rect1.top, Rect1.Width (), Rect1.Height (),
SWP_NOZORDER | SWP_SHOWWINDOW);
::DeferWindowPos (hdwp, ctrl2.GetSafeHwnd (), HWND_TOP,
Rect2.left, Rect2.top, Rect2.Width (), Rect2.Height (),
SWP_NOZORDER | SWP_SHOWWINDOW);
::EndDeferWindowPos (hdwp);
이러면 각 콘트롤의 위치와 크기가 결정된후, 한꺼번에 갱신되기 때문에 화면 깜박임이 훨씬 줄어듭니다.
화면 깜박임을 없애는 가장 간단하면서도 강력한 방법은 WS_CLIPCHILDREN을 사용하는 방법입니다.
다이얼로그 리소스의 프로퍼티에서 WS_CLIPCHILDREN이라는 style만 추가해주시면 대부분의 컨트롤들이 깜박거리지 않으면서 리사이징 됩니다.
| 드라이버 학습에 참고 사이트 (0) | 2008/01/21 |
|---|---|
| 파일검색 루틴 (0) | 2008/01/18 |
| [MFC]콘트롤의 사이즈나 위치 변경시 깜박임 현상 줄이기 (0) | 2007/10/01 |
| [MFC]타이틀바 제거 (0) | 2007/09/30 |
| 파일명 바꾸기 간단소스 (0) | 2007/09/18 |
| [API] Msn 메신저(모양은 NateOn) (0) | 2007/01/31 |