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
[4209] Re:Re:Re:Re:윈도우에 마우스가 왔다. 임프님아~ 꼭즘~^^★★
박지훈.임프 [cbuilder] 3244 읽음    2000-10-12 00:00
한성수 님이 쓰신 글 :
: 먼져 임프님에게 머쯤 무러보구시픈데여~ ^^
:
: CM_MOUSEENTER 하고 CM_MOUSELEAVE가 어디에 어떻게 정의되어있는지요? ^^
:
: 요것즘 알려주세요~ 그리구 맨 마지막즘 봐주시겠어요? ^^
:
: 5일간의 머리 쥐어짭을 깨고 이렇게 해결했습니다. ^^
:
: 먼져 해더파일에 요렇게 정의해주죠~
:
:   void __fastcall WndProc(Messages::TMessage &Message);
:
: 그담엔 cpp 화일에다가 이렇게 정의 했습니다.
:
: void __fastcall TOViewWW::WndProc(Messages::TMessage &Message)
: {
:   if(Message.Msg == CM_MOUSEENTER)
:   {
:     Width = 100;
:     Height = 100;
:     OVOpen = false;
:   }
:   else
:   {
:     TForm::WndProc(Message);
:   }
:   if(Message.Msg == CM_MOUSELEAVE)
:   {
:     Width = 100;
:     Height = 0;
:     OVOpen = true;
:   }
:   else
:   {
:     TForm::WndProc(Message);
:   }
: }
:
: 그러니까 되네여 ^^ 기쁘다~ 구주 오셨네~ ^^ OVOpen은 제가 쓰는 bool 변수니까 따라하실필요까진~ ^^
:
: 아참~ 윈도 2000 에서는 CM_MOUSELEAVE이 98보다 좀 문제가 있더군요..
: 98에서는 가끔 마우스를 인식안해서버려 그게좀 문제구요~
: 2000에서는 폼1을 띄운 메인폼으로 마우스가 가야지만 CM_MOUSELEAVE를 인식하더군여
: 머 확실한건 아니지만~ ^^ 임프님아? 먼 방법이 있나여?



임펠리테리입니다.

CM_MOUSEENTER, CM_MOUSELEAVE 메시지는 vcl에서 정의된 사용자정의 메시지이며 controls.hpp(원래는 controls.pas)에 정의되어 있습니다. 이것으로 첫번째 질문에는 답변이 되었지요?

그리고... 두 메시지를 사용하신 코드를 보면.. 사용하신 방법이 맞습니다. 사용하신 방법은 TWinControl의 멤버인 WndProc() 함수를 오버라이드한거죠. 마지막에서 원래의 베이스클래스 함수를 호출해준 것까지 정확히 코딩하셨습니다.
이 방법외에도 메시지맵을 이용하는 방법도 있습니다.
메시지맵에 대해 질문하신 것은 아니고, 또 이 경우에 특별히 메시지맵이나 WndProc() 함수를 이용하는 방법 둘 중 어떤 게 낫다고 말할 수 없기 때문에 메시지맵의 작성법은 그냥 넘어가구요. 코딩하는 프로그래머의 편의상, 따로 처리하려는 메시지의 숫자를 기준으로 해서 두가지 중 한가지 방법을 택하면 적절할 겁니다.

마지막 질문. 당연합니다. 좀 복잡하게 처리되기는 합니다만, 결과적으로, CM_MOUSELEAVE 메시지는 자신이 아닌 다른 컨트롤로 마우스가 이동했을 때 그 다른 컨트롤에 의해 발생되기 때문이죠. 원래 이 두가지 메시지가 Win32 api 에 있는 것이 아니고 볼랜드에서 편의상 만들어놓은 것이기 때문에, vcl 컨트롤이 아닌 컨트롤들은 CM_MOUSELEAVE 메시지를 발생시키는 역할을 할수 없단 말입니다.
가장 무식하고도(?) 확실한 방법은, 일정시간마다 현재 마우스 위치의 컨트롤을 검사해주는 겁니다.

그럼 참고하시길...

+ -

관련 글 리스트
4174 윈도우에 마우스가 왔다. 나갔다는걸 아는 방법즘 알려주세요~ 수야 3070 2000/10/09
4179     Re:윈도우에 마우스가 왔다. 나갔다는걸 아는 방법즘 알려주세요~ 박지훈.임프 3184 2000/10/09
4183         Re:Re:윈도우에 마우스가 왔다. 나갔다는걸 아는 방법즘 알려주세요~ 수야 3201 2000/10/09
4195             Re:Re:Re:윈도우에 마우스가 왔다. 임프님아~ 꼭즘~^^★★ 한성수 3236 2000/10/10
4209                 Re:Re:Re:Re:윈도우에 마우스가 왔다. 임프님아~ 꼭즘~^^★★ 박지훈.임프 3244 2000/10/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.