|
VCL의 Forms.pas 파일을 보면, TCustomForm의 Paint 함수가 다음과 같이 정의되어 있습니다.
procedure TCustomForm.Paint;
begin
if Assigned(FOnPaint) then FOnPaint(Self);
end;
이걸 C++빌더식으로 번역해보면 다음과 같이 됩니다.
void __fastcall TCustomForm::Paint(void)
{
if(FOnPaint != NULL) FOnPaint(this);
}
그러니까, TCustomForm::Paint 함수의 단 하나의 역할은 OnPaint 이벤트핸들러를 호출하는 것입니다.
따라서, 만약 Paint 함수를 오버라이딩하고 베이스클래스(TCustomForm)의 Paint를 다시 호출해주면 OnPaint도
호출이 되고, 베이스클래스의 함수를 호출해주지 않으면 OnPaint는 이벤트핸들러를 달아놔도 그 핸들러가 동작하지
않게 됩니다.
그럼...
잠스터 님이 쓰신 글 :
: 메인폼에 폼을 하나 추가하였습니다.
: 그리는 루틴을 정의하기 위해 폼의 OnPaint 이벤트를 구현하는 도중,
: 문뜩 다른 컴포넌트의 repaint 처리와 차이점이 보여서 이렇게 질문올립니다.
: 가령 TCustomPanel을 상속받아 paint루틴을 정의하려면
: DYNAMIC void __fastcall Paint(void);
: 이렇게 정의하여 사용했었는데, 만약 위에서 추가한 폼에 OnPaint 이벤트와 재정의한 Paint 함수를 같이 둘 경우,
: 어떻게 동작하는지 궁금하네요..
: (사실 Paint 함수를 재정의하는 것도 어떤 컴포넌트에 해줘야 하는지도 잘 모르겟슴니다..)
:
: 이 부분에 대해 자세히 설명해 주시면 와방 감사드리겠슴니다..^^
|