zoukankan      html  css  js  c++  java
  • 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 }  

            

  • 相关阅读:
    rest webapi 返回数据
    下载指定路径的文件到本地服务器
    NPOI excel文件解析
    (Demo分享)利用JavaScript(JS)实现一个九宫格拖拽功能
    关于DOM的理解
    (Demo分享)利用JavaScript(JS)做一个可输入分钟的倒计时钟功能
    关于闭包函数和递归函数的详细理解
    纯CSS制作加<div>制作动画版哆啦A梦
    冒泡排序
    Python常用模块及正则表达式知识点,你需要了解的全在这了
  • 原文地址:https://www.cnblogs.com/gongxijun/p/5043825.html
Copyright © 2011-2022 走看看