Win32学习(七) 鼠标消息
基本鼠标消息
WM_LBUTTONDOWN - 鼠标左键按下
WM_LBUTTONUP - 鼠标左键抬起
WM_RBUTTONDOWN - 鼠标右键按下
WM_RBUTTONUP - 鼠标右键抬起
WM_MOUSEMOVE - 鼠标移动消息
双击消息
WM_LBUTTONDBLCLK - 鼠标左键双击
WM_RBUTTONDBLCLK - 鼠标右键双击
使用时需要在注册窗口类的时候添加CS_DBLCLKS风格。
滚轮消息
WM_MOUSEWHEL - 鼠标滚轮消息
附带信息:
wPARAM:
LOWORD - 其他按键的状态
HIWORD - 滚轮的偏移量,通过正负值表示滚轮方向
正:向前滚动 负:向后滚动
IPARAM:鼠标当前的位置,屏幕坐标系
LOWORD - X坐标
HIWORD - Y坐标
使用:
通过偏移量,获取滚动的方向和距离 (只会出现120的倍数的数)
鼠标基本消息
附带信息:
wPARAM : 其他按键的状态,例如Ctrl/Shift等
IPARAM: 鼠标的位置,窗口客户区坐标系
LOWORD X坐标位置
HIWORD Y坐标位置
一般清空鼠标按下/抬起成对出现。在鼠标移动过程中,会根据移动速度产生一系列的WM_MOUSEMOVE消息.
鼠标点击事件
#include <windows.h>
#include <stdio.h>
HANDLE g_hOutput = 0;
void OnLButtonDown(HWND hWnd,WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONDOWN:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText,strlen(szText), NULL, NULL);
}void OnLButtonUP(HWND hWnd, WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONDOWN:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM IParam)
{switch (msgID) {case WM_LBUTTONDOWN:OnLButtonDown(hWnd, wParam, IParam);break;case WM_LBUTTONUP:OnLButtonUP(hWnd, wParam, IParam);break;case WM_DESTROY:PostQuitMessage(0);break;}return DefWindowProc(hWnd, msgID, wParam, IParam);
}int CALLBACK WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdLine, int nCmdShow) {AllocConsole();g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);WNDCLASS wc = { 0 };wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.hCursor = NULL;wc.hIcon = NULL;wc.hInstance = hIns;wc.lpfnWndProc = WndProc;wc.lpszClassName = "Main";wc.lpszMenuName = NULL;wc.style = CS_HREDRAW | CS_VREDRAW;RegisterClass(&wc); //将以上所有赋值全部写入操作系统中//在内存创建窗口HWND hWnd = CreateWindowEx(0, "Main", "window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hIns, NULL);//显示窗口ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd);//消息循环MSG nMsg = { 0 };while (GetMessage(&nMsg, NULL, 0, 0)) { //抓消息TranslateMessage(&nMsg);//翻译消息DispatchMessage(&nMsg);//派发消息:将消息交给窗口处理函数来处理。}return 0;
}
//需要在任务管理器中退出线程!
鼠标滑动
#include <windows.h>
#include <stdio.h>
HANDLE g_hOutput = 0;
void OnLButtonDown(HWND hWnd,WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONDOWN:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText,strlen(szText), NULL, NULL);
}void OnLButtonUP(HWND hWnd, WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONDOWN:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}void OnMouseMove(HWND hWnd, WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_MOUSEMOVE:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM IParam)
{switch (msgID) {case WM_MOUSEMOVE:OnMouseMove(hWnd, wParam, IParam);break;case WM_LBUTTONDOWN:OnLButtonDown(hWnd, wParam, IParam);break;case WM_LBUTTONUP:OnLButtonUP(hWnd, wParam, IParam);break;case WM_DESTROY:PostQuitMessage(0);break;}return DefWindowProc(hWnd, msgID, wParam, IParam);
}int CALLBACK WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdLine, int nCmdShow) {AllocConsole();g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);WNDCLASS wc = { 0 };wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.hCursor = NULL;wc.hIcon = NULL;wc.hInstance = hIns;wc.lpfnWndProc = WndProc;wc.lpszClassName = "Main";wc.lpszMenuName = NULL;wc.style = CS_HREDRAW | CS_VREDRAW;RegisterClass(&wc); //将以上所有赋值全部写入操作系统中//在内存创建窗口HWND hWnd = CreateWindowEx(0, "Main", "window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hIns, NULL);//显示窗口ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd);//消息循环MSG nMsg = { 0 };while (GetMessage(&nMsg, NULL, 0, 0)) { //抓消息TranslateMessage(&nMsg);//翻译消息DispatchMessage(&nMsg);//派发消息:将消息交给窗口处理函数来处理。}return 0;
}
//需要在任务管理器中退出线程!
双击事件
#include <windows.h>
#include <stdio.h>
HANDLE g_hOutput = 0;
void OnLButtonDown(HWND hWnd,WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONDOWN:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText,strlen(szText), NULL, NULL);
}void OnLButtonUP(HWND hWnd, WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONUP:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}void OnMouseMove(HWND hWnd, WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_MOUSEMOVE:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}void OnLButtonDblClk(HWND hWnd) {const char* szText = "WM_LBUTTONDBLCLK\n";WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM IParam)
{switch (msgID) {case WM_LBUTTONDBLCLK:OnLButtonDblClk(hWnd);break;//case WM_MOUSEMOVE:// OnMouseMove(hWnd, wParam, IParam);break;case WM_LBUTTONDOWN:OnLButtonDown(hWnd, wParam, IParam);break;case WM_LBUTTONUP:OnLButtonUP(hWnd, wParam, IParam);break;case WM_DESTROY:PostQuitMessage(0);break;}return DefWindowProc(hWnd, msgID, wParam, IParam);
}int CALLBACK WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdLine, int nCmdShow) {AllocConsole();g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);WNDCLASS wc = { 0 };wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.hCursor = NULL;wc.hIcon = NULL;wc.hInstance = hIns;wc.lpfnWndProc = WndProc;wc.lpszClassName = "Main";wc.lpszMenuName = NULL;wc.style = CS_HREDRAW | CS_VREDRAW |CS_DBLCLKS;RegisterClass(&wc); //将以上所有赋值全部写入操作系统中//在内存创建窗口HWND hWnd = CreateWindowEx(0, "Main", "window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hIns, NULL);//显示窗口ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd);//消息循环MSG nMsg = { 0 };while (GetMessage(&nMsg, NULL, 0, 0)) { //抓消息TranslateMessage(&nMsg);//翻译消息DispatchMessage(&nMsg);//派发消息:将消息交给窗口处理函数来处理。}return 0;
}
//需要在任务管理器中退出线程!
滚轮消息
#include <windows.h>
#include <stdio.h>
HANDLE g_hOutput = 0;
void OnLButtonDown(HWND hWnd,WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONDOWN:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText,strlen(szText), NULL, NULL);
}void OnLButtonUP(HWND hWnd, WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_LBUTTONUP:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}void OnMouseMove(HWND hWnd, WPARAM wParam, LPARAM IParam) {char szText[256] = { 0 };sprintf_s(szText, "WM_MOUSEMOVE:其他按键状态:%d,X=%d,Y=%d\n", wParam, LOWORD(IParam), HIWORD(IParam));WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}void OnLButtonDblClk(HWND hWnd) {const char* szText = "WM_LBUTTONDBLCLK\n";WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}void OnMouseWheel(HWND hWnd, WPARAM wParam) {short nDelta = HIWORD(wParam);char szText[256] = { 0 };sprintf_s(szText, "WM_MOUSEWHEEL:nDetal = %d\n", nDelta);WriteConsole(g_hOutput, szText, strlen(szText), NULL, NULL);
}LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM IParam)
{switch (msgID) {case WM_MOUSEWHEEL:OnMouseWheel(hWnd,wParam);break;case WM_LBUTTONDBLCLK:OnLButtonDblClk(hWnd);break;//case WM_MOUSEMOVE:// OnMouseMove(hWnd, wParam, IParam);case WM_LBUTTONDOWN:OnLButtonDown(hWnd, wParam, IParam);break;case WM_LBUTTONUP:OnLButtonUP(hWnd, wParam, IParam);break;case WM_DESTROY:PostQuitMessage(0);break;}return DefWindowProc(hWnd, msgID, wParam, IParam);
}int CALLBACK WinMain(HINSTANCE hIns, HINSTANCE hPreIns, LPSTR lpCmdLine, int nCmdShow) {AllocConsole();g_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);WNDCLASS wc = { 0 };wc.cbClsExtra = 0;wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);wc.hCursor = NULL;wc.hIcon = NULL;wc.hInstance = hIns;wc.lpfnWndProc = WndProc;wc.lpszClassName = "Main";wc.lpszMenuName = NULL;wc.style = CS_HREDRAW | CS_VREDRAW |CS_DBLCLKS;RegisterClass(&wc); //将以上所有赋值全部写入操作系统中//在内存创建窗口HWND hWnd = CreateWindowEx(0, "Main", "window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hIns, NULL);//显示窗口ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd);//消息循环MSG nMsg = { 0 };while (GetMessage(&nMsg, NULL, 0, 0)) { //抓消息TranslateMessage(&nMsg);//翻译消息DispatchMessage(&nMsg);//派发消息:将消息交给窗口处理函数来处理。}return 0;
}
//需要在任务管理器中退出线程!
Win32学习(七) 鼠标消息相关推荐
- WIN32学习——鼠标消息
1 基本鼠标消息 WM_LBUTTONDOWN - 鼠标左键按下 WM_LBUTTONUP - 鼠标左键抬起 WM_RBUTTONDOWN - 鼠标右键按下 WM_RB ...
- Win32 鼠标消息 - 客户区鼠标消息、非客户区鼠标消息、击中测试、鼠标滚轮
注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 注:以下内 ...
- Win32学习笔记 第三章 HelloWin 选择自 villager 的 Blog
Win32学习笔记 作者: 姜学哲(netsail0@163.net) 教材: Windows程序设计(第五版)北京大学出版社 [美]Charles Petzold 著 北京博彦科技发展有限公司 ...
- 随想录(easyx中的键盘输入和鼠标消息)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 我曾经写过一篇关于easyx的blog,地址在这.easyx是基于win32 api最简单的图 ...
- win32创建窗口及其消息循环
转自:http://anyzixin.blog.163.com/blog/static/365289122007103031657355/ http://anyzixin.blog.163.com/b ...
- 10 Windows编程——鼠标消息
和鼠标相关的三个属于:click,double-click,drag 鼠标消息和键盘消息不同:只要鼠标跨越某个窗口,或者在某个窗口中按键,消息. 客户去鼠标消息 WM_MOUSEMOVE WM_[L, ...
- win32开发(按键消息)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 对于一个应用来说,按键和鼠标都是基本的消息.当然,win32也需要独立处理按键消息和鼠标消息.今 ...
- 滴水逆向win32学习笔记1
滴水逆向win32学习笔记 一.字符编码 基本介绍 关于utf-16.utf-8和unicode的关系 BOM头 二.宽字符 基本介绍 常用函数 三.Win32 API中的宽字符 什么是win32 A ...
- 《Windows程序设计》读书笔七 鼠标
第七章 鼠标 7.1 鼠标的基础知识 fMouse = GetSystemMetrics(SM_MOUSEPRESENT); //判断是否使用鼠标 cButtons = GetSystemMetric ...
最新文章
- 为什么老外不愿意用MyBatis?
- mfc 窗体不可点击的原因_如何设计一个简单的Access登录窗体(2)
- ASCII码对照表 转帖
- 计算机网络应用是学什么类型的,计算机网路中服务类型及应用
- 最会说话的人,都有这十种风度
- JSP的JavaBean前的知识点
- 更新性能服务器图片介绍,图文并茂 讲述企业版Linux性能发展史
- BackgroundWorker的使用
- 【软件测试】:测试通过标准
- 1.1 波士顿房价预测
- 解读 | 关于阿里巴巴架构大调整,有 7 个重点值得特别关注
- 腾讯微博qq说说备份导出工具_腾讯微博停止运营,赶紧申请备份吧
- XXXXX was compiled with optimization - stepping may behave oddly; variables may not be available.
- 五子棋PVP项目总结
- 1 - 基于卡方检验的特征选择
- python爬虫技术如何挣钱?教你爬虫月入三万
- 电容-贴片陶瓷电容的NPO、C0G、X7R、X5R、Y5V、Z5U
- VB 任意随机数(N-M)的通用函数(单取、多取存入数组、排序等功能) 内附随机数介绍
- pgAdminIII简介
- 微信开放平台-- 微信红包发放
热门文章
- k米评分容易得高分的歌_福州这家全新亮相的K歌王国,“舞台灯”都给你搭好了,简直酷到没朋友!...
- c语言xml解析器libxm2
- Unity3d AndroidJNI两篇应用示例。羽化的文章。
- 锅炉液位控制系统的c语言程序,基于MATLAB的锅炉液位控制系统的设计和仿真.doc...
- ios中的doc,pdf等附件的查看与下载问题
- IP地址查询对应的域名在线网址分享
- 如何制作patch文件?
- 您需要配置好的 Python 2 SDK 来渲染 Epydoc docstring的解决方案
- ZABBIX监控网络交换机的思路
- 制作一个简易的自主夹取机械臂