출처 : http://wiziple.net/tt/83
OnSize 메소드에서 MoveWindow나 SetWindowPos를 사용하여 여러개의 컨트롤을 한꺼번에 옮길 때에 Flickering 현상이 일어날 수 있다.
이는 각각의 컨트롤들이 개별적으로 그려지고 갱신되기 때문에 일어나는 현상이다. 따라서 OnSize 함수 내에는 MoveWindow나 SetWindowPos를 대체하는 함수를 사용해야 한다.
바로, BeginDeferWindowPos(), DeferWindowPos(), EndDeferWindowPos() 이 세 함수를 이용하여 여러개의 윈도우를 한꺼번에 옮기고 갱신할수 있다.
간략한 사용법은 아래와 같다.
HDWP hdwp = ::BeginDeferWindowPos(3);
::DeferWindowPos (hdwp, 컨트롤1.GetSafeHwnd(), HWND_TOP,
Rect1.left, Rect1.top, Rect1.Width (), Rect1.Height (),
SWP_NOZORDER | SWP_SHOWWINDOW);
::DeferWindowPos (hdwp, 컨트롤2.GetSafeHwnd(), HWND_TOP,
Rect2.left, Rect2.top, Rect2.Width (), Rect2.Height (),
SWP_NOZORDER | SWP_SHOWWINDOW);
::DeferWindowPos (hdwp, 컨트롤3.GetSafeHwnd(), HWND_TOP,
Rect2.left, Rect2.top, Rect2.Width (), Rect2.Height (),
SWP_NOZORDER | SWP_SHOWWINDOW);
::EndDeferWindowPos (hdwp);
댓글 없음:
댓글 쓰기