콘트롤들의 위치나 크기를 변경하고자 할 때 통상 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만 추가해주시면 대부분의 컨트롤들이 깜박거리지 않으면서 리사이징 됩니다.

크리에이티브 커먼즈 라이선스
Creative Commons License

Tag : ,

« PREV : 1 : ... 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : ... 85 : NEXT »