|
grman 님이 쓰신 글 :
:
: TPanel로부터 상속받은 component를 만들고 있습니다.
: 이 component는 WM_PAINT handler를 사용합니다.
: 모양을 약간 수정하기 위한것이지요.
:
: 이 handler의 끝부분에서 다음과 같은 일을 하고 있습니다.
:
: for(int i=0; i<ControlCount; i++) Controls[i]->Repaint();
:
: Panel 내의 control들을 다시 그려주기 위해서 넣은 것입니다.
:
: 그런데 이 line에 문제가 있었습니다.
: Panel 내의 control 중 특정 control들은 특정 style에서
: 자신의 parent(즉, 이 panel)까지 다시 그리려고 하더군요.
:
: 예를 들면
: Panel 내에 있는 Label의 Transparent property가 true이면
: Panel까지 InvalidateRect해주는 code를 VCL source에서 확인할 수 있었습니다.
:
: 그래서 위의 code에 의해 handler가 다시 호출되고..
: 영원히 반복되었던 것입니다. (결국 꽥~)
:
: 무한 호출을 막기 위해 내부적으로 flag을 써봤는데
: 일부 control들이 안보이게 되거나
: 깜빡거리는 현상까지 나타났습니다.
:
: 어떻게 해야 하나요?
임펠리테리입니다.
직접 WM_PAINT를 처리하지 말고 Paint() 메소드를 오버라이드하세요. 물론 베이스클래스의 Paint() 메소드를 호출하는 코드도 있어야죠.
그럼 참고하시길...
|