基本鼠标消息
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学习(七) 鼠标消息相关推荐

  1. WIN32学习——鼠标消息

    1 基本鼠标消息     WM_LBUTTONDOWN - 鼠标左键按下     WM_LBUTTONUP - 鼠标左键抬起     WM_RBUTTONDOWN - 鼠标右键按下     WM_RB ...

  2. Win32 鼠标消息 - 客户区鼠标消息、非客户区鼠标消息、击中测试、鼠标滚轮

    注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 注:以下内 ...

  3. Win32学习笔记 第三章 HelloWin 选择自 villager 的 Blog

    Win32学习笔记 作者: 姜学哲(netsail0@163.net) 教材: Windows程序设计(第五版)北京大学出版社  [美]Charles Petzold 著  北京博彦科技发展有限公司 ...

  4. 随想录(easyx中的键盘输入和鼠标消息)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 我曾经写过一篇关于easyx的blog,地址在这.easyx是基于win32 api最简单的图 ...

  5. win32创建窗口及其消息循环

    转自:http://anyzixin.blog.163.com/blog/static/365289122007103031657355/ http://anyzixin.blog.163.com/b ...

  6. 10 Windows编程——鼠标消息

    和鼠标相关的三个属于:click,double-click,drag 鼠标消息和键盘消息不同:只要鼠标跨越某个窗口,或者在某个窗口中按键,消息. 客户去鼠标消息 WM_MOUSEMOVE WM_[L, ...

  7. win32开发(按键消息)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 对于一个应用来说,按键和鼠标都是基本的消息.当然,win32也需要独立处理按键消息和鼠标消息.今 ...

  8. 滴水逆向win32学习笔记1

    滴水逆向win32学习笔记 一.字符编码 基本介绍 关于utf-16.utf-8和unicode的关系 BOM头 二.宽字符 基本介绍 常用函数 三.Win32 API中的宽字符 什么是win32 A ...

  9. 《Windows程序设计》读书笔七 鼠标

    第七章 鼠标 7.1 鼠标的基础知识 fMouse = GetSystemMetrics(SM_MOUSEPRESENT); //判断是否使用鼠标 cButtons = GetSystemMetric ...

最新文章

  1. 为什么老外不愿意用MyBatis?
  2. mfc 窗体不可点击的原因_如何设计一个简单的Access登录窗体(2)
  3. ASCII码对照表 转帖
  4. 计算机网络应用是学什么类型的,计算机网路中服务类型及应用
  5. 最会说话的人,都有这十种风度
  6. JSP的JavaBean前的知识点
  7. 更新性能服务器图片介绍,图文并茂 讲述企业版Linux性能发展史
  8. BackgroundWorker的使用
  9. 【软件测试】:测试通过标准
  10. 1.1 波士顿房价预测
  11. 解读 | 关于阿里巴巴架构大调整,有 7 个重点值得特别关注
  12. 腾讯微博qq说说备份导出工具_腾讯微博停止运营,赶紧申请备份吧
  13. XXXXX was compiled with optimization - stepping may behave oddly; variables may not be available.
  14. 五子棋PVP项目总结
  15. 1 - 基于卡方检验的特征选择
  16. python爬虫技术如何挣钱?教你爬虫月入三万
  17. 电容-贴片陶瓷电容的NPO、C0G、X7R、X5R、Y5V、Z5U
  18. VB 任意随机数(N-M)的通用函数(单取、多取存入数组、排序等功能) 内附随机数介绍
  19. pgAdminIII简介
  20. 微信开放平台-- 微信红包发放

热门文章

  1. k米评分容易得高分的歌_福州这家全新亮相的K歌王国,“舞台灯”都给你搭好了,简直酷到没朋友!...
  2. c语言xml解析器libxm2
  3. Unity3d AndroidJNI两篇应用示例。羽化的文章。
  4. 锅炉液位控制系统的c语言程序,基于MATLAB的锅炉液位控制系统的设计和仿真.doc...
  5. ios中的doc,pdf等附件的查看与下载问题
  6. IP地址查询对应的域名在线网址分享
  7. 如何制作patch文件?
  8. 您需要配置好的 Python 2 SDK 来渲染 Epydoc docstring的解决方案
  9. ZABBIX监控网络交换机的思路
  10. 制作一个简易的自主夹取机械臂