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

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();  //卸载
BOOL InstallHook();     //安装

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

1 mouse_Hook=NULL;   //将钩子NULL

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

1 InstallHook()

4>、在析构函数中添加

UninstallHook()

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

 1 BOOL InstallKbHook( )
 2 {
 3
 4     if (mouse_Hook)   UninstallHook();
 5     mouse_Hook = SetWindowsHookEx(WH_MOUSE_LL,
 6         (HOOKPROC)(LowLevelMouseProc), AfxGetApp()->m_hInstance, NULL);
 7
 8     return( mouse_Hook != NULL);
 9 }
10
11 BOOL UninstallHook()
12 {
13
14     BOOL jud = FALSE;
15     if (mouse_Hook) {
16         jud= UnhookWindowsHookEx(mouse_Hook );
17         mouse_Hook = NULL;  //set NULL
18     }
19
20     return jud;
21 }
22
23 LRESULT CALLBACK LowLevelMouseProc (INT nCode, WPARAM wParam, LPARAM lParam)
24 {
25     CPoint  _mousepoint;
26     MSLLHOOKSTRUCT *pkbhs = (MSLLHOOKSTRUCT *)lParam;
27     switch (nCode)
30     {
31
32     case HC_ACTION:
33         {
34             //鼠标左击
35             if(wParam == WM_LBUTTONDOWN||wParam == WM_RBUTTONDOWN||wParam == WM_MBUTTONDOWN||wParam ==WM_LBUTTONUP||wParam ==WM_RBUTTONUP||wParam == WM_MBUTTONUP){
36                     //获取鼠标的位置,并进行必要的判断
37
38                     //鼠标右键按下
39                 if(Mmdlg!=NULL){
40                     if(    Mmdlg->setingmenu!=NULL&& Mmdlg->bo_back!=1)
41                     {
42                         //如果鼠标不在当前客户端位置之内
43                        GetCursorPos(&_mousepoint);
44                         CRect m_crect;
45                         //Mmdlg->setingmenu->GetClientRect(m_crect);
46                         Mmdlg->setingmenu->GetWindowRect(m_crect);
47                         //ScreenToClient(Mmdlg->setingmenu->m_hWnd,&m_crect);
48                         if(m_crect.bottom>_mousepoint.y && m_crect.top<_mousepoint.y &&
49                             m_crect.left<_mousepoint.x  && m_crect.right >_mousepoint.x
50                           ){
51                                 ;  //啥也不干
52                         }
53                         else{
54                             delete [] Mmdlg->setingmenu;
55                             Mmdlg->setingmenu=NULL;
56                         }
57                     }
58                     Mmdlg->bo_back=0;
59                 }
60             }
61         }
62     default:   break;
63     }
64
65     return CallNextHookEx (NULL, nCode, wParam, lParam);
66 }  

        

时间: 2024-08-25 01:46:34

C++获取鼠标位置及全局检测鼠标行为的相关文章

如何获取鼠标位置

获取鼠标位置,首先需要加载js文件: 然后设置一个div,给定大小: 最后进行具体操作: //首先要先设置一个div,给定大小 <div id="m"></div> //进行操作 <script type="text/javascript"> var x,y,T,L; T=$("#m").offset().top;//div离开左端的距离 L=$("#m").offset().left;//

获取鼠标坐标并且根据鼠标位置不同弹出不同内容

获取鼠标坐标,并且根据鼠标所在div弹出不同内容: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <head

js获取浏览器宽高、网页宽高、屏幕宽高、鼠标位置等(带图片说明)

网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;(点击查看大图) 网页可见区域宽: document.body.offsetWidth (包括边线的宽);网页可见区域高: document.body.offsetHeight (包括边线的宽);(点击查看大图)有没有发现,offsetWidth和clientWidth的区别,offsetWidt是连滚动条一起包含在内的. 网页正文全文宽: documen

DevExpress 获取gridview 鼠标位置所在单元格

偶尔会有一些需要获取 gridview 鼠标位置所在单元格,从而实现某些特定功能的需求,经过一番研究,得出以下实现方法: GridHitInfo _info; Point _pt = gridview1.GridControl.PointToClient(Control.MousePosition); _info = gridview1.CalcHitInfo(_pt); bool IsInColumn =_info.InColumn;//判断是否在表头 GridColumn col= _inf

使用c#创建一个可以监视全局鼠标位置的程序

首先要在焦点不在当前应用程序中也要获得鼠标位置,我们就需要使用全局鼠标钩子 我们先新建一个类库GlobalMouseHook, 然后导入命名空间:System.Windows.Forms;System.Runtime.InteropServices; 将类重命名为MouseHook,其代码如下: [c-sharp] view plaincopy using System.Windows.Forms; using System.Runtime.InteropServices; namespace 

JS获取鼠标位置的三种方法

在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的游览器下会有不同的结果甚至是有的游览器下没结果,这篇文章就鼠标点击位置坐标获取做一些简单的总结. 获取鼠标位置首先要了解什么是event,event是一个声明了全局变量的一个对象,在chrome和IE下,可以随意访问,对于好奇的朋友console.log一下event.但!!!Firefox下是没有event这个对象的!! 好消息的是:在IE8,chrome下,是有event这个对象的! 鼠标点击位置

BaseTool中鼠标双击事件获取鼠标位置的方法

ArcGISEngine的BaseTool类中提供了鼠标双击.鼠标移动.鼠标按键按下.鼠标按键弹起四种鼠标事件,但是鼠标双击事件的参数跟其他三种不一样,双击事件中没有提供鼠标位置信息. public virtual void OnDblClick(); public virtual void OnMouseDown(int Button, int Shift, int X, int Y); public virtual void OnMouseMove(int Button, int Shift

canvas获取鼠标位置

canvas获取鼠标位置 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compati

jquery 获取鼠标位置

//获取鼠标位置 $(function(){ $('body').mousemove(function(e) { e = e || window.event; __xx = e.pageX || e.clientX + document.body.scroolLeft; __yy = e.pageY || e.clientY + document.body.scrollTop; }); }); 原文地址:https://www.cnblogs.com/azhqiang/p/10876958.ht