专栏首页mlC++获取鼠标位置及全局检测鼠标行为

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 }  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C线程同步/异步

    1 #include<windows.h> 2 #include<stdio.h> 3 #include<string.h> 4 //#include ...

    Gxjun
  • C++ 高级语法学习与总结(代码实例)

        C++11增加了许多的特性,auto就是一个很明显的例子。  还有就是typedid()获取数据变量的类型     看下面简短的代码:         ...

    Gxjun
  • HDUOJ---2110

    Crisis of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/3276...

    Gxjun
  • R语言与正则表达式

    R语言在提取字符串上有着强大的能力,其中字符串可以看做为文本信息。今天需要跟大家介绍一款更为通用、更加底层的文本信息提取工具——正则表达式。

    用户1359560
  • python脚本练习(4):正则表达式实例

    题目:写一个函数,它使用正则表达式, 确保传入的口令字符串是强口令。强口令的定义是:长度不少于 8 个字符, 同时包含大写和小写字符, 至少有一位数字。你可能需...

    AsicWonder
  • Leetcode:148_Sort List | O(nlogn)链表排序 | Medium

    题目:Sort List Sort a linked list in O(n log n) time using constant space complexi...

    猿大白
  • 解码:哈希算法如何工作的示例

    如果密码学是一个主体,它的哈希算法就是它的核心。如果加密是一辆汽车,它的哈希算法就是它的引擎。如果加密是一部电影,它的哈希算法就是明星。如果密码学是太阳系,它的...

    随心助手
  • 技术是最简单的

    技术是最简单的,最简单的也是技术。有很多事情只有我们经历了明白,有些事情我们可以从别人身上学到,有些则永远学不到。 动画片里的人们以一种预想的方式生活着,这个世...

    春哥大魔王
  • 汪仔饭获数千万A轮融资 网域名启用wangzaifan.com

    1月16日消息,狗粮新品类公司汪仔饭已于2018年1月获千万级pre-A轮融资,本轮融资由青山资本领投,前海母基金跟投,天使轮投资方齐一创投及李成个...

    躲在树上的域小名
  • 对牙医不再恐惧!一款新的AR应用或将改善牙齿矫正体验

    VRPinea

扫码关注云+社区

领取腾讯云代金券