C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[59529] TPaintBox에 그린 그림의 깜빡임 문제
이송화 [] 1381 읽음    2009-12-24 19:37
1.jpg 68.4KB 디자인 화면
2.jpg 81.1KB 실행 화면
TPaintBox에 그린 그림이 깜빡이는 문제가 있어서 질문드립니다.

약 1초 마다 들어오는 GPS 데이터 수신시 위성 위치와 신호세기를 Bitmap에 그린 후 PaintBox의 OnPaint 이벤트핸들러에서 BitBlt 함수로 Bitmap의 내용을 PaintBox의 Canvas에 그리도록 했습니다.
한편, Bitmap에 그릴 때는 함수 내에서 생성한 임시 비트맵에 그린 후 그 내용을 OnPaint 이벤트핸들러에서 사용하는 Bitmap에 복사하도록 코딩했습니다.

PaintBox1은 위성위치를 PaintBox2에는 신호세기를 그리는데 PaintBox1과 PaintBox2 모두 메인 폼의 왼쪽에 있는 Panel3에 있습니다.

메인폼의 WM_ERASEBKGND 메시지에서 배경을 지우지 않도록 해도 소용 없더군요.

그래서, Panel의 WindowProc를 제가 만든 함수로 바꿔서 조사해본 결과 알아낸 것은 Panel3 오른쪽 옆에 있는 Panel1에 WM_PAINT 메시지가 발생할 때 Panel3도 다시 그려지는 문제가 있더군요.
그래서, Panel3의 사용자정의 WindowProc 함수에서 WM_PAINT 메시지 도착시 Bitmap의 내용을 PaintBox로 BitBlt하고 Panel3->Dispatch()를 해주지 않았더니 깜빡이는 문제는 사라졌는데 옆에 있는 Panel1 위에 있는 것들이 지워지는 문제가 발생합니다.

Panel1은 Panel3과 맞닿거나 겹쳐있지 않고 완전히 떨어져 있는 상태입니다.
두 Panel 모두 메인 폼에 직접 올려져 있는 것이구요 FullRepaint는 false로 설정해두었습니다.

TPanel에 DoNotPaintClientArea와 같은 속성이 있어서 그 값이 ture면 테두리만 그리고 ClientArea는 손대지 않고 그대로 두는 기능이 있다면 깜빡임 문제는 없을 것인데....

깜빡임 문제를 어떻게 잡아야 하나요?

그림1은 디자인 타임 화면이고 그림2는 깜빡임 문제 해결 안한 실행화면입니다.

+ -

관련 글 리스트
59529 TPaintBox에 그린 그림의 깜빡임 문제 이송화 1381 2009/12/24
59538     Re:TPaintBox에 그린 그림의 깜빡임 문제 장성호 2334 2009/12/26
59593         감사합니다. (내용무) 이송화 1076 2010/01/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.