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
[1586] [질문] 메세지 처리에 대하여/프포
zpikn205 [ ] 3578 읽음    1999-07-14 18:02
안녕하세요. 임프님
한꼬맹이 입니다
오래간만에 왔죠
오래간만에 온 만큼 질문 또한 난해합니다.
다름이 아니라 메세지처리 과정이 너무 헷깔려서 요즘 골머리를
썩고 있습니다.
보통 전통적인 윈도우메세지 처리 방법은 윈도우프로시저를 통하여
모든 메세지를 처리합니다.
그런데 VCL이 문제인데 ...
원래 VCL에서는 메세지처리를 할때 WndProc()를 오버라이딩 하는 방법과 메세지 맵을
이용하는 두 가지 방법이 가장 보편적으로 사용되는 방법입니다.
그런데 파스칼소스를 들여다 보면 전통적인 윈도우프로시저를 서브클래스 하는 부분이
적지 않게 나와 있더군요.. 이 서브클래싱이라는 것이 VCL에서는 드러나지 않는 전통적인
윈도우프로시저를 서브클래싱 하는 것인지 아니면 TConrol에 원형이 선언된 WndProc()의 가상
함수의 최상위 글래스의 오버라이딩된 WndProc()를 서브클래스 하는 것인지 아니면 전통적인
윈도우프로시저와 TConrol에 원형이 선언된 WndProc()의 가상함수가 같은 것이라고 봐야
하는 지요... 생각하면 생각할수록 해답이 안나오는 군요. 이것이 저의 첫번째 질문입니다.
그리고 기대하시라 2번째질문입니다.
VCL에서 가장 보편적으로 사용되는 메세지 처리방법이 위에서 언급했듯이
WndProc()를 오버라이딩하는 것과 메세지맵을 사용하는 2가지 방법입니다.
그런데 메세지 큐에서 건져온 메세지가 어떤 특정 컨트롤을 통해서 어떤 흐름으로
이 두가지 방법에서 처리되는 과정 혹은 순서가 무척 궁굼해서 제나름대로
공부하고 실험해서 터득한 지식이 제대로 된건지 아닌지 검정을 해주시고 부연설명도
부탁드립니다.
그럼 상세한 메세지 처리과정을 센咀린黴윱求?.
일단 메세지 큐에서 메세지하나가 해당 컨트롤에 이쁘게 전달이 된다.
그러면 VCL 최상위 자식클래스의 오버라이딩된 가상함수 WndProc()에서 처리를 시작한다.
최상위 WndProc()에서 아빠 클래스인 TControl단계의 WndProc()까지 주루룩 메세지가
거쳐지나간다. TControl단계의 WndProc()는 마지막에 Dispatch함수를 호출함으로서
메세지 맵을 처리한다. 최상위 클래스의 자식은 또 다시 조상 클래스들의 메세지맵을 처리하기
위해서 상속단계에 따라  TObject에 선언된 Dispatch()함수 까지 주루룩 호출함으로서
메세지가 제일 젊은 자식에서 최고 고령의 아빠까지 순차적으로 처리되는 것으로
이해하고 있습니다.
자 여기까지 대강 적어봤습니다.
너무 질문이 긴건 아닌지~  ^_^
꼭 답변해 주시면 정말 고맙겠습니다.
그러면 건강하세요.....


+ -

관련 글 리스트
1586 [질문] 메세지 처리에 대하여/프포 zpikn205 3578 1999/07/14
1589     [답변] ZPIKN205/ 메세지 처리에 대하여/프포 박지훈.임프 3630 1999/07/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.