메세지 맵은 Windows 메세지를 편하게 처리하기 위해 만든 매크로일 뿐입니다.
동일하게 하시면 됩니다.
워드 님이 쓰신 글 :
: 답변 감사합니다.
:
: WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam) 부분에서 CM_MOUSELEAVE 은 안들어오네요..
:
: CM_MOUSELEAVE 을 찾아보니까, 메세지맵을 활용해서 기능을 구현하는것 같습니다..
: WindowProc() 함수 내에서 처리가 가능한 방법은 없을까요??
:
: 감사합니다.
:
:
: 아루스 님이 쓰신 글 :
: : CM_MOUSELEAVE 로 해보시겠어요? (오랜 기간 VCL 환경을 떠나 있어 확실하진 않지만 어렴풋이 이 메세지가 기억나네요)
: :
: : 워드 님이 쓰신 글 :
: : : 빌더 2007에서 테스트 하였습니다.
: : :
: : : 다른 메세지(WM_RBUTTONUP, WM_MOUSEMOVE, WM_SIZE) 등은 잘 들어오는데,
: : : WM_MOUSELEAVE 메세지는 들어오질 않습니다.
: : : (GBox는 GroupBox이구요, Panel에서도 테스트해보았는데 증상은 동일합니다.)
: : :
: : : 제가 어떤 부분을 잘못 코딩해서 이런 증상이 나오는지 도움 부탁드립니다...
: : :
: : :
: : : //-----------------------------------------
: : : [헤더부분]
: : :
: : : TWndMethod m_OrgProc;
: : : void __fastcall NewProc(Messages::TMessage &Message);
: : : bool __fastcall WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
: : : //-----------------------------------------
: : :
: : : //-----------------------------------------
: : : [소스 부분]
: : :
: : : 1. 생성자 또는 시작부분)
: : : m_OrgProc = GBox->WindowProc;
: : : GBox->WindowProc = NewProc;
: : :
: : : 2. 함수 부분 )
: : : void __fastcall TForm1::NewProc(Messages::TMessage &Message)
: : : {
: : : if(!WindowProc(Message.Msg, Message.WParam, Message.LParam))
: : : {
: : : m_OrgProc(Message);
: : : }
: : : }
: : :
: : : bool __fastcall TForm1::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
: : : {
: : : switch(uMsg)
: : : {
: : : case WM_PAINT:
: : : break;
: : : case WM_SIZE:
: : : break;
: : : case WM_MOUSEWHEEL:
: : : break;
: : : case WM_RBUTTONDOWN:
: : : break;
: : : case WM_RBUTTONUP:
: : : break;
: : : case WM_MOUSELEAVE: //안들어온다.
: : : ShowMessage("WM_MOUSELEAVE");
: : : break;
: : : case WM_MOUSEMOVE:
: : : break;
: : : default:
: : : return FALSE;
: : : break;
: : : }
: : : return TRUE;
: : : }
: : : //-----------------------------------------
: : :
: : :
: : :
: : :
: : :
: : :
: : :
|