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
[47157] Re:고수님들~ 도와주세요~~
장성호 [nasilso] 1484 읽음    2006-11-21 01:36
BackCloseImageClick 등과 같은 함수는
이벤트 핸들러로..  Event가 발생했을때.. 실행하는 함수입니다.

어떤 이벤트가 발생했을때 대충 아래와 같은 순서로 (맞나?)  처리됩니다.

1. 마우스 이벤트 발생
2. 윈도우 메세지 큐에 마우스이벤트 메세지 저장
3. Application에서 GetMessage 로   윈도우 메세지 큐에서 메세지 가져옴
4. 이벤트 핸들러가 있으면 해당함수 호출(예 -BackCloseImageClick )

그러므로 이벤트 핸들러(BackCloseImageClick ) 를 백번천번 호출해도 실제 마우스 event가 발생하지는 않죠

님께서 원하시는 기능은 아래 함수들로 구현할수 있을것입니다.


POINT pos;
GetCursorPos( &pos );  //현재 마우스 좌표를 가져옴
SetCursorPos( pos.x, pos.y ); //마우스 위치를 ( pos.x , pos.y ) 옮겨줌

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);  //마우스 LeftButton Down이벤트를 발생시킴
mouse_event(MOUSEEVENTF_LEFTUP, 0,0, 0, 0);         //마우스 LeftButton Up이벤트를 발생시킴
//--------------------------------------------------------------------------------------
mouse_event(***) 함수를 이용하면 실제 mouse이벤트가 발생한것처럼 동작합니다.

원격제어 프로그램이나...
또는 게임아이템 자동으로 획득하는 프로그램들.. 등이
mouse_event  함수를  핵심적으로 이용해서 만듭니다.

if (bData[0] == -82)
{
    TPoint pt;
    pt.x=0;
    pt.y=0;
    pt=BackCloseImage->ClientToScreen(pt);// ScreenToClient()
    pt.x+=10;
    pt.y+=10;
    SetCursorPos( pt.x, pt.y ); //마우스 위치를 ( pos.x , pos.y ) 옮겨줌
     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);  //마우스 LeftButton Down이벤트를 발생시킴
     mouse_event(MOUSEEVENTF_LEFTUP, 0,0, 0, 0);    
}
뭐 대충 위와 같은식으로 하면
BackCloseImage 위  (10,10) 에서 mouse Click이벤트가 발생한것처럼 동작하지요

그럼...



허접 님이 쓰신 글 :
: 안녕하세요.
: 몇일째 하나의 문제로 끙끙 앓고 있습니다.  ㅠ.ㅜ
: 마우스가 아닌 걸로 마우스 기능을 구현하려고 하고 있는데요.
: 돔 스위치라고 아시나요?
: 현재 RS232 통신을 이용해서 MICOM으로부터 데이터를 받아 오고 있습니다. (UART 통신으로)
: MICOM에서 수신 되는 데이터는 delta-x, delta-y 라는 데이터 인데, 이 데이터를 받아 마우스 커서를 움직이는 것과 동일한 기능을 하는 프로그램 입니다.  (마우스가 아닙니다)
: 그런데 문제는 돔 스위치라는 것을 눌렀을 때 0xAE (- 82) 라는 데이터가 나옵니다.
: 이 0xAE, 즉 -82라는 데이터가 나오면, 마우스 왼쪽 버튼을 클릭한 것과 동일한 기능을 수행하도록 하고 싶은거죠.
: Main Form Event 중에 OnClick 하고 연결을 해보면 되지 않을까 싶었는데 잘 안되네요..
: 어찌해야 되는지.....    뭘 잘못한건지..  모르겠네요..
: 급한 마음에 cpp 파일을 첨부해서 올립니다.
: 시간 좀 내셔서 불쌍한 중생 좀 살려 주세요..   ㅠ.ㅜ
: 부탁 드립니다.
: 참고로, 소스에 462번째 라인을 보시면
: if (bData[0] == -82)
:     {
:         BackCloseImageClick(FormMain);
:         count++;
:         //Edit3->Text = count;
:     }
: 이렇게 되어 있는데, -82 라는 값이 나오면 BackCloseImageClick(FormMain) 을 해줍니다.
: 처음에 만들때는 이런식으로 얼렁뚱땅 넘겼는데, 마우스도 아닌것을 마우스랑 동일한 기능을 하려니, 아직 초보인 저의 실력으로는 감당하기 벅차네요.  ㅠ.ㅜ
:
: 이상입니다.

+ -

관련 글 리스트
47156 고수님들~ 도와주세요~~ 허접 1156 2006/11/20
47157     Re:고수님들~ 도와주세요~~ 장성호 1484 2006/11/21
47159         Re:Re:고수님들~ 도와주세요~~ 허접 1544 2006/11/21
47162             Re:Re:Re:고수님들~ 도와주세요~~ 열씸! 1539 2006/11/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.