|
김재원 님이 쓰신 글 :
: 1. 컴포넌트를 상속받아 특정 이벤트를 처리한 후(오버라이딩 개념이 맞나요?),
: 상속받은 컴포넌트의 원래 메세지 처리 함수를 호출하고 안하고를 조절하는 방법이 다음과 같이 하는게 맞는지 궁금합니다.
: TCustomPanel을 상속받은 컴포넌트에서 property에 OnKeyDown 이벤트를 추가하여 구현했을 때
: void __fastcall 자식클래스::KeyDown(Word &Key, Classes::TShiftState Shift) {
: // 여기에 원하는 처리
:
: ::TWinControl::KeyDown(Key, Shift); // 이 라인을 코딩하면 베이스 클래스의 KeyDown 메시지 헨들러 호출, 없애면 호출 안함?
: }
:
: 위의 베이스 클래스의
: 위와 같이 TCustomPanel을 상속받아 KeyDown 이벤트를 가로챈 후,
: 원하는 처리를 해주고 다시 베이스 클래스의 KeyDown 이벤트 헨들러를 호출했는데도 불구하고
: 원래의 동작이 나타나지 않아서 이렇게 질문 올립니다.
:
:
: 2. A라는 패널위에 B라는 패널을 올렸습니다.
: 이때 A에서 B 영역을 포함한 라인을 그릴려고 합니다. 그냥 A의 canvas에 그리면, B 영역에 가려서 나오지 않는군요..
: 이렇게 자신이 가지는 컴포넌트 위를 포함해서 그리고 싶을 때 어떻게 해야 하는지 알고 싶습니다.
:
: 답변 미리 감사드립니다.
그런데, TCustomPanel의 WndProc 메서드가 키입력을 처리하던가요?
컨트롤의 이벤트 처리는 WndProc에서부터 시작합니다.
그곳에서 처리해주지 않는다면 아무리 다른 것을 건드려보아야 소용 없습니다.
TCustomPanel과 이를 상속받은 컨트롤의 WndProc 메서드가 키입력을 처리하지 않는다면, WndProc 메서드를 오버라이딩하여 키입력을 처리하도록 만들어야 합니다.
|