컴포넌트를 하나 만들고 있거든요... 어플리케이션에서 타이머가 1초에 50번 돌면서 컴포넌트의 OnPaint메소드를 호출하죠... OnPaint메소드에서는 직사각형하고 선 같은 걸 5개 정도 그려줘요... 근데 1초에 50번 그걸 그려주려니까 번쩍거리죠... 상당히 보기 싫더라구요...
그런데 Memory Bitmap이란 걸 쓰면 번쩍거리지 않는다고 하더라구요...
그래서 그걸 컴포넌트 안에 집어넣으려구요...
만드는 컴포넌트는 TPaintBox를 상속받았습니다...
어떻게 하면 좋을까요... 이왕이면 코드로 알려주셨으면 감사하겠습니다...
그럼...
WM_Paint 메세지는 기본적으로 클라이언트 영역을 모두 무효화 시켜 버립니다. 음.. 다시그린다구요...
번쩍거리는건 전체 영역을 다시 그리기 때문입니다.
1초에 50번을 하시든 500 번을 하시든.. 다시그리는걸 하지 않아야 합니다.
페인트 메세지는 다시그릴필요가 있을때 윈도우즈가 보내주는겁니다.
그러니까.. 음.. 현재 창이 다른창에 가렸다가 나타날때라던지..
최소화 되었다가 나타난다던지.. 화면밖에 있다가 다시 화면안으로 들어온
다던지.. 영역의 일부라도 그런부분이 있으면 보내주거든요..
원래는 해당메세지 내에서.. 다시그려줘야할 영역을 구해서. 해야하는데.
좀 귀찮죠. 그래서 그냥 몽땅 다시그려 버립니다..
결론적으로 그리는 작업 자체를 WM_Paint 메세지를 발생시켜서 하지 마세요
그냥 그리시구요.. 그럼 그림은 나타나겠지만.. 다른창에 가렸다가 나타나는경우에.. WM_Paint 메세지가 불리워진 경우에 지워져 버리죠...
그부분을 프로그래밍 하세요... 해당 메소드 내에서는요...
간단하게 비트맵을 하나 만드셔서. 거기다가 같은 그림을 그려도 되구요.
WM_Paint 에서는 전체영역을 다시 그려버리는 거죠. Bitblt로 저장한
비트맵을 페인트박스에 복사하는식으로 하시면..됩니다.
그럼.. 설명이 되었나 모르겠네요..
즐거운시간 되세요.
- 하얀까마귀 -