C++获取鼠标位置及全局检测鼠标行为
时间:2022-05-05
本文章向大家介绍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 }
- 用Vue.js开发微信小程序:开源框架mpvue解析
- 分类模型的性能评估——以SAS Logistic回归为例: 混淆矩阵
- R语言,你要怎样画地图?
- R语言绘制中国地图,并展示流行病学数据
- 使用R语言构造投资组合
- R语言构建追涨杀跌量化交易模型
- 美团点评境外度假团队前端项目开发实践总结
- 在jfinal中使用druid,并配置查看权限
- java中遇到过的String的一些特性
- Kaggle案例——使用scikit-learn解决DigitRecognition问题
- 基于Kaggle数据的词袋模型文本分类教程
- javascript中遇到的字符串对象处理
- 传统企业站开发 - 页面布局
- AngularJS中使用service,并同步数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ThreadLocal与Java引用类型(文末含福利)
- GitLab 12 跨版本 13 升级
- 打破你的认知!Java空指针居然还能这样玩,90%人不知道…
- Android 原生 SQLite 数据库的一次封装实践
- Window常用账号密码修改(Git)
- 高通AI研究院|高效网络设计|结构化卷积分解
- tomcat调优 tomcat配置优化
- error: PyThreadState {aka struct _ts} has no member named exc_type
- Python创建目录文件夹
- python 按顺序读文件夹下面的文件
- python剪切文件
- 一个hashCode问题的追问,差点让我陷入无底洞
- 【JAVA基础&高级】 面向对象篇
- MySQL-InnoDb行格式与数据页结构 Krains 2020-08-08
- 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 汉语分词领域主要分词算法、组件、服务(上)...