본문 바로가기
C++ 200제/코딩 IT 정보

VC++ PostMessage 예제, mfc 화면 갱신 깜박임 사용법

by vicddory 2018. 9. 21.

VC++ PostMessage 예제, mfc 화면 갱신 깜박임 사용법


PostMessage 사용 시 주의


PostMessage 는 SendMessage 와 달리 프로그램이 메시지를 빈번히 처리해서 메시지큐가 full인 경우에는 처리되지 않는다. 따라서 중요한 처리의 경우는 리턴값을 확인해야 한다.


VC++ PostMessage, 화면 갱신 깜박임 사용법, 주의 사항[MFC 그래픽 예제, 화면 갱신 깜박임 해결]


화면 갱신 시 깜박임 없애기


클라이언트 영역에 그래픽 작업이나 컨트롤을 올릴 때 화면이 깜박이는 문제를 없에려면,


(1) Memory DC를 사용한다.

화면에 직접 그릴 경우는 배경 칠하고 위에 다른 것을 그리면 이것이 눈에 띄게 된다. CreateCompatibleDC를 이용해 메모리 DC에 모두 그려준 다음 BitBlt를 이용해 한꺼번에 화면에 복사해 주면 깜박임이 없어진다.


(2) OnEraseBkgnd (WM_ERASEBKGND) 처리를 막는다.


윈도우는 기본적으로 화면 갱신 시 WM_ERASEBKGND로 먼저 배경을 지우고 WM_PAINT로 화면을 그린다. 보통 배경을 흰색으로 채우기(지우기) 때문에 깜박임이 발생한다. OnEraseBkgnd 를 바로 return TRUE; 로 하여 처리를 막으면 깜박임이 없어진다.


(3) Parent 윈도우가 있는 경우


메인 프레임이 아닌 일반 윈도우를 Parent 윈도우로 가진 경우 Parent 윈도우를 먼저 그리고 Child 윈도우를 그리기 때문에 Child 윈도우에서 깜박임이 발생한다.


이때는 Parent 윈도우의 속성에 WS_CLIPCHILDREN 을 추가해주면 Parent 영역 갱신 시 Child 영역은 제외하기 때문에 깜박임이 없어진다.


1
ModifyStyle(0, WS_CLIPCHILDREN);
cs


출처 - 모르면 고생하는 VC++ 팁 [링크]

VC++ PostMessage 예제, mfc 화면 갱신 깜박임 사용법

댓글