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
[503] [답변] 김나현/ 빌더/ 마우스 enter, leave/프포
박지훈.임프 [cbuilder] 5988 읽음    1998-08-07 03:27
안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당자 임펠리테리입니다.

컴퍼넌트 생성에 대한 것은 여기서 처음부터 끝까지 설명하기엔 너무도 방대하구요,

또 굳이 여기서 설명하지 않아도 시중에서 구할 수 있는 서적이 많으니 설명은 생략

하죠.

빌더에서 CM_MOUSELEAVE와 CM_MOUSEENTER 메시지의 처리는 메시지맵이라는 조금 이상

하게 보이는 구조를 통해서 가능합니다. 이 메시지맵이라는 것은, 사실상은 메시지를

처리하는 함수 Dispatch()를 오버라이딩하는 구조로 되어있는데, 마지막에서 베이스

클래스의 Dispatch() 함수를 호출하는거죠. 단순한 매크로로 되어있는겁니다.

구체적인 정의를 알고 싶으시면 sysdefs.h 화일을 보시면 됩니다.

이놈을 사용하려면,

BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER((처리할 메시지), (메시지구조체형), (처리할 함수));
END_MESSAGE_MAP(베이스클래스 타입이름);

이렇게 해주시면 됩니다. 위치는 처리할 컨트롤의 클래스 내부구요.

물론, (처리할 함수)는 따로 선언/정의되어 있어야 합니다. 이때, 이 함수는 다음과

같아야 합니다.

MESSAGE void (함수이름)((메시지구조체형) &msg);

물론 마지막에 msg는 그냥 인자이름이니 맘대로 지으셔도 되죠.

이와같은 이론을 바탕으로, 실제로 CM_MOUSELEAVE 와 CM_MOUSEENTER의 핸들러를 만들

려면 다음과 같이 하면 됩니다.

클래스 선언 내부에,

class TForm1 : public TForm
{
    ....
    MESSAGE void OnMouseEnter(TMessage &msg);
    MESSAGE void OnMouseLeave(TMessage &msg);

BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, OnMouseEnter);
    VCL_MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, OnMouseLeave);
END_MESSAGE_MAP(TForm);
};

이렇게 선언해주시고, 유니트에 OnMouseEnter()와 OnMouseLeave()함수를 구현해주면

됩니다.

작성하시는 클래스 내부에서 이와같이 해주시구요, 물론 메시지맵의 마지막에 있는

END_MESSAGE_MAP(TForm); 에서 TForm은 작성하시는 컨트롤의 베이스클래스 타입이름

이어야 하겠죠.

메시지맵은 VCL에서 지원해주지 않는 기능을 구현하기 위해 여러가지 목적으로 다양

하게 쓰입니다. 가령, 캡션바가 아닌 폼의 클라이언트영역(그냥 빈부분)을 드래그할

때 폼이 움직이도록 할때는 WM_NCHITTEST 메시지를 가로채서 처리합니다. 또 다른 많

은 목적으로도 사용가능하죠.

그럼, 도움되시길 바라면서, 이만...




독립문에서 임펠리테리였습니다.

(cbuilder, skyhi18)



+ -

관련 글 리스트
501 [질문] 빌더/ 마우스 enter, leave/프포 김나현 5553 1998/08/06
503     [답변] 김나현/ 빌더/ 마우스 enter, leave/프포 박지훈.임프 5988 1998/08/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.