您的位置:首页 > 编程语言 > C语言/C++

C++获取鼠标位置及全局检测鼠标行为

2015-12-13 22:52 549 查看
1、获取鼠标位置(在屏幕的位置)

  CPoint m_mouse;

GetCursorPos(&m_mouse);

2、 屏幕转化为客户端(控件的相对位置)& 客户端位置转化为屏幕位置

ClientToScreen(this->m_hwnd,m_mouse); //客户端位置转化为屏幕位置

ScreenToClient(this->m_hwnd,m_mouse) ; //屏幕转化为客户端

3、获取控件关于在屏幕的位置

CRect rc

GetWindowRect(&rc);

4、检测鼠标的action的方式多,自己用的多的是msdn上介绍的callback的鼠标钩子(低级钩子)函数来实现

    1> 、对鼠标进行的几个全局变量进行声明:

     将这部分放置在C++类的外部  

/*
全局变量和全局函数定义
设定一个鼠标低级钩子变量
*/

HHOOK mouse_Hook ;
LRESULT CALLBACK LowLevelMouseProc ( INT nCode,
WPARAM wParam,
LPARAM lParam
);
BOOL UninstallHook();  //卸载
BOOLInstallHook();     //安装


2>、在构造函数中初始化

mouse_Hook=NULL;   //将钩子NULL


3>、在初始化函数中安装Hook

InstallHook()


4>、在析构函数中添加

UninstallHook()


5>、 在当前cpp的类外中定义声明的三个函数

BOOL InstallKbHook( )
{

if (mouse_Hook)   UninstallHook();
mouse_Hook = SetWindowsHookEx(WH_MOUSE_LL,
(HOOKPROC)(LowLevelMouseProc), AfxGetApp()->m_hInstance, NULL);

return( mouse_Hook != NULL);
}

BOOL UninstallHook()
{

BOOL jud = FALSE;
if (mouse_Hook) {
jud= UnhookWindowsHookEx(mouse_Hook );
mouse_Hook = NULL;  //set NULL
}

return jud;
}

LRESULT CALLBACK LowLevelMouseProc (INT nCode, WPARAM wParam, LPARAM lParam)
{
CPoint  _mousepoint;
MSLLHOOKSTRUCT *pkbhs = (MSLLHOOKSTRUCT *)lParam;
switch (nCode)
{

case HC_ACTION:
{
//鼠标左击
if(wParam == WM_LBUTTONDOWN||wParam == WM_RBUTTONDOWN||wParam == WM_MBUTTONDOWN||wParam ==WM_LBUTTONUP||wParam ==WM_RBUTTONUP||wParam == WM_MBUTTONUP){
//获取鼠标的位置,并进行必要的判断

//鼠标右键按下
if(Mmdlg!=NULL){
if(    Mmdlg->setingmenu!=NULL&& Mmdlg->bo_back!=1)
{
//如果鼠标不在当前客户端位置之内
GetCursorPos(&_mousepoint);
CRect m_crect;
//Mmdlg->setingmenu->GetClientRect(m_crect);
Mmdlg->setingmenu->GetWindowRect(m_crect);
//ScreenToClient(Mmdlg->setingmenu->m_hWnd,&m_crect);
if(m_crect.bottom>_mousepoint.y && m_crect.top<_mousepoint.y &&
m_crect.left<_mousepoint.x  && m_crect.right >_mousepoint.x
){
;  //啥也不干
}
else{
delete [] Mmdlg->setingmenu;
Mmdlg->setingmenu=NULL;
}
}
Mmdlg->bo_back=0;
}
}
}
default:   break;
}

return CallNextHookEx (NULL, nCode, wParam, lParam);
}


        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: