CSDN - 专家门诊 - 问题 
 推荐给朋友 | 关闭窗口  
 
 
 
  主  题:  mouse hook 
作  者:  e0 (忆玲)  
等  级:   
信 誉 分:  100 
人  气:  0 
所属论坛:  VC/MFC 进程/线程/DLL 
问题点数:  40   
回复次数:  0 
发表时间:  2003-6-1 11:36:14 
   
 
   
我想做这样的程序:  
原始的程序是这样的,鼠标在View窗口中移动时,view中会出现一段跟随鼠标光标的文字。用OnMouseMove和OnDraw实现:  
 
.h中声明成员变量:m_MousePoint  
.cpp:  
 
void  CHookTestView::OnMouseMove(UINT  nFlags,  CPoint  point)    
{  
           //  TODO:  Add  your  message  handler  code  here  and/or  call  default  
           m_MousePoint=point;  
           Invalidate(TRUE);  
           CView::OnMouseMove(nFlags,  point);  
}  
 
void  CHookTestView::OnDraw(CDC*  pDC)  
{  
           CHookTestDoc*  pDoc  =  GetDocument();  
           ASSERT_VALID(pDoc);  
           //  TODO:  add  draw  code  for  native  data  here  
           if(m_MousePoint.x>=0  &&  m_MousePoint.y>=0)  
           {  
                       pDC->TextOut(m_MousePoint.x,m_MousePoint.y,"TextTextText");  
           }  
}  
 
现在,我要在我的程序中加一个鼠标钩子Hook,使得每次接受到鼠标事件时,先将传递来的“鼠标位置”变量向左上方偏移(pt.x-=30;pt.y-=30),然后再将消息传递给view窗口。这样,这段跟随鼠标的文字就应该偏移。我是这样做的。  
InstallHook()和myMouseProc都已经订一位static.  
这段代码紧接在view.cpp后面:  
 
HHOOK  myMouseHook;  
HINSTANCE  myInstance;  
 
void  CHookTestView::InstallHook()  
{  
           myMouseHook=  
           SetWindowsHookEx(WH_MOUSE,  
                       myMouseProc,  
                       AfxGetApp()->m_hInstance,  
                       GetCurrentThreadId());  
}  
 
LRESULT  CALLBACK  CHookTestView::myMouseProc(int  nCode,  WPARAM  wParam,  LPARAM  lParam)  
{  
           CString  str;  
           MOUSEHOOKSTRUCT*  pStruct  =  (MOUSEHOOKSTRUCT*)lParam;  
           pStruct->pt.x-=30;  
           pStruct->pt.y-=30;  
           return  CallNextHookEx  (myMouseHook,  nCode,  wParam,  lParam);  
}