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
[46293] Re:[질문]타이머와 윈도우 메시지 관계..커서변경 감지
공부맨 [] 1347 읽음    2006-08-24 10:44
1. 포커스를 잃으면 해당 Application에 WM_MOUSEMOVE 메시지가 발생하지 않으므로 Application->OnMessage는 좋은 방법이 아닌것 같습니다. 타이머가 맘에 안드시면 Thread쪽으로 생각해보시거나(어차피 타이머와 마찬가지로 일정한 주기로 체크하는 방식이 되겠지만요), DLL을 이용한 Hook 쪽으로 방향을 잡으시는게 더 좋을꺼 같은데요.

2. DX는 몰라서 패스-_-;


Symphony 님이 쓰신 글 :
: 안녕하세요. 눈팅만 하다가 오랜만에 질문 올려보네요..
:
: 다름이 아니라 마우스커서 모양이 변경됨을 알아내려고 테스트 코드를 만들다가
:
: 궁금증이 생겨서 질문을 올리게 되었습니다.
:
: <소스>
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "mmsystem.h"
: #include "Main.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TMainF *MainF;
:
: //-- Global Variable --//
: TMouse *MouseControl = new TMouse();
: TPoint MousePos;
: TCursorInfo CursorInfo;
:
: AnsiString previous, current;
: HCURSOR Handle_Cursor = NULL;
:
: //---------------------------------------------------------------------------
: __fastcall TMainF::TMainF(TComponent* Owner)
:     : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
: void __fastcall TMainF::FormCreate(TObject *Sender)
: {
:     Application->OnMessage = WMTestAction;
:
:     RadioTimer->Checked = true;
:     Timer1->Enabled = true;
:
:     Memo1->Text = "";
: }
: //---------------------------------------------------------------------------
: void __fastcall TMainF::GetMouseInfo(void)
: {
:     MousePos = MouseControl->CursorPos;
:     MouseX->Caption = MousePos.x;
:     MouseY->Caption = MousePos.y;
:
:     CursorInfo.cbSize = sizeof(CursorInfo);
:     GetCursorInfo(&CursorInfo);
:
:     Handle_Cursor = CursorInfo.hCursor;
:     current = (BYTE)Handle_Cursor;
:
:     if(current != previous){
:         Memo1->Lines->Add(current);
:         previous = current;
:     }
: }
: //---------------------------------------------------------------------------
: void __fastcall TMainF::FormDestroy(TObject *Sender)
: {
:     delete MouseControl;
:     MainF->Close();
: }
: //---------------------------------------------------------------------------
: void __fastcall TMainF::Timer1Timer(TObject *Sender)
: {
:     GetMouseInfo();
: }
: //---------------------------------------------------------------------------
: void __fastcall TMainF::WMTestAction(tagMSG &msg, bool &bHandled)
: {
:     if(msg.message == WM_MOUSEMOVE){
:         GetMouseInfo();
:     }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TMainF::RadioMsgClick(TObject *Sender)
: {
:     RadioTimer->Checked = false;
:     RadioMsg->Checked = true;
:
:     if(RadioMsg->Checked){
:         Timer1->Enabled = false;
:     }
:
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TMainF::RadioTimerClick(TObject *Sender)
: {
:     RadioMsg->Checked = false;
:     RadioTimer->Checked = true;
:
:     if(RadioTimer->Checked){
:         Timer1->Enabled = true;
:     }
: }
: //---------------------------------------------------------------------------
:
:
: 위 소스를 돌려보시면, 타이머를 이용하여 마우스 커서의 모양을 감지할 경우, 현재 클라이언트가 포커스를 가지고 있지 않더라도 마우스커서가 변경됨을 감지할 수 있습니다. 그런데, 메시지를 이용하여 감지하려고 하면, 클라이언트 안에서 마우스를 이동할때만 감지가 되더군요.
: 메시지 또한 포커스를 안받더라도 디텍이 될듯 한데....왜그러는지 답변 부탁드립니다.
: 이런것 때문에 전역 후킹을 할바에는, 그냥 타이머를 이용하는게 나을듯 한데....왠지 부하가 심할것 같기도 하고
: 정확한 순간에 디텍하기에는 모자란 감이 있기도 한것 같고..
:
:
: 그리고 위 프로그램을 테스트 하다보니, 일반 윈도우창에서의 마우스커서감지는 되는듯 하나, 다이렉트X등을 이용한 화면에서의 마우스커서는 감지를 못하고 있습니다. 이것또한 이유를 알수가 있을까요?
:
: 메시지를 이용하여 잡을경우는 WM_SETCURSOR에서 안잡히길래, 그냥 WM_MOUSEMOVE에서 잡히도록 해보았습니다.
:
: 쓰다보니 질문이 아리송한데...많은 조언 부탁드립니다.

+ -

관련 글 리스트
46259 [질문]타이머와 윈도우 메시지 관계..커서변경 감지 Symphony 1189 2006/08/22
46293     Re:[질문]타이머와 윈도우 메시지 관계..커서변경 감지 공부맨 1347 2006/08/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.