10 Windows编程——鼠标消息
和鼠标相关的三个属于:click,double-click,drag
鼠标消息和键盘消息不同:只要鼠标跨越某个窗口,或者在某个窗口中按键,消息。
客户去鼠标消息
WM_MOUSEMOVE
WM_[L,M,R] BUTTONDOWN
WM_[L,M,R] BUTTONUP
WM_[L,M,R] BUTTONDBLCLK
对于这些消息,lParam的低字节为x坐标,高字节为y坐标。
wParam只是鼠标按键以及shift和Ctr1按键的状态(这个和键盘消息相似)。
要测试鼠标按钮是否按下:MK_LBUTTON,MK_MBUTTON,MK_RBUTTON,MK_SHIFT,MK_CONTROL.
非客户区鼠标消息:
WM_NCMOUS EMOVE
WM_NCLBUTTONDOWN.
WM_NCLBUTTONUP
WM_NCLBUTTONDBLCLK
1 #include<Windows.h> 2 #include<WinUser.h> 3 #include<tchar.h> 4 #include<stdio.h> 5 6 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); 7 8 int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow) 9 { 10 WNDCLASS WndClass; 11 TCHAR* ClassName = TEXT("MyClass"); 12 HWND hwnd; 13 MSG msg; 14 15 WndClass.cbClsExtra = 0; 16 WndClass.cbWndExtra = 0; 17 WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); 18 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); 19 WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 20 WndClass.hInstance = hInst; 21 WndClass.lpfnWndProc = WindProc; 22 WndClass.lpszClassName = ClassName; 23 WndClass.lpszMenuName = NULL; 24 WndClass.style = CS_VREDRAW | CS_HREDRAW; 25 26 RegisterClass(&WndClass); 27 hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInst, NULL); 28 ShowWindow(hwnd, nShow); 29 UpdateWindow(hwnd); 30 31 while (GetMessage(&msg, NULL, 0, 0)) 32 { 33 TranslateMessage(&msg); 34 DispatchMessage(&msg); 35 } 36 return 0; 37 } 38 39 40 41 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 42 { 43 HDC hdc; 44 PAINTSTRUCT pt; 45 TCHAR *rectwords = TEXT("我在学习鼠标消息"); 46 static int i; 47 switch (message) 48 { 49 case WM_CREATE: 50 return 0; 51 case WM_SIZE: 52 return 0; 53 case WM_PAINT: 54 hdc = BeginPaint(hwnd, &pt); 55 Rectangle(hdc, 10, 10, 100, 100); 56 if (i) 57 { 58 TextOut(hdc, 100, 10, rectwords, _tcslen(rectwords)); 59 } 60 EndPaint(hwnd, &pt); 61 return 0; 62 case WM_CHAR: 63 return 0; 64 case WM_LBUTTONUP: 65 i = 0; 66 InvalidateRect(hwnd, NULL, TRUE); 67 return 0; 68 case WM_LBUTTONDOWN: 69 InvalidateRect(hwnd, NULL, TRUE); 70 if (LOWORD(lParam)>10 && LOWORD(lParam)<100 && HIWORD(lParam)>10 && HIWORD(lParam)<100) 71 { 72 i = 1; 73 } 74 return 0; 75 case WM_MOUSEMOVE: 76 hdc = GetDC(hwnd); 77 if (wParam&MK_LBUTTON) 78 { 79 SetPixel(hdc, LOWORD(lParam), HIWORD(lParam), 0); 80 } 81 ReleaseDC(hwnd, hdc); 82 return 0; 83 case WM_DESTROY: 84 PostQuitMessage(0); 85 return 0; 86 default: 87 break; 88 } 89 90 return DefWindowProc(hwnd, message, wParam, lParam); 91 }
View Code
转载于:https://www.cnblogs.com/kelamoyujuzhen/p/9322262.html
10 Windows编程——鼠标消息相关推荐
- windows主要鼠标消息
windows主要鼠标消息 WM_LBUTTONDOWN 鼠标停留在客户区,同时鼠标左键按下 WM_LBUTTONUP 鼠标左键释放 WM_RBUTTONDOWN 鼠标停留在客户区,邮件按下 ...
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
版本:VS2015 语言:C++ 本来想昨天写个消息窗口的内容,讲一些好玩的东西,不过没有时间了,就放到一起了. 今天正好把书的第二章看完了,感觉良好,Windows的编程确实难度要高,一下子会有一大 ...
- windows编程,消息函数中拦截消息的问题
很多年没有写windows窗口程序了,今天自制基于vulkan的程序时遇到了一些问题,部分代码如下: LRESULT CALLBACK XWindow::WndProc(HWND hWnd, UINT ...
- window编程_消息分类
Window应用程序利用Windows消息(Message) 与应用程序及系统进行信息交换. 消息分为: 消息号:有事先定义好的消息名标识 字节参数(wParam):用于提供消息的附加信息 长字节参数 ...
- windows编程之鼠标消息总结
1 确定鼠标是否存在:fMouse = GetSystemMetrics (SM_MOUSEPRESENT) ; 2 获取鼠标上按键数目:cButtons = GetSystemMetrics (SM ...
- Windows编程捕获特定窗口及键盘鼠标消息模拟
Windows编程捕获特定窗口及键盘鼠标消息模拟 一.简介 二.使用到的API简介 三.获取Windows记事本的编辑区窗口的句柄并模拟输入操作 1.分析 2.代码一 3.代码二 四.后记 一.简介 ...
- windows 编程 —— 消息与参数(滚动条、键盘、鼠标)
目录: 滚动条 键盘 鼠标 滚动条ScrollBar 发送消息:WM_VSCROLL和WM_HSCROLL 参数wParam:wParam消息参数被分为一个低字组和一个高字组.wParam的低字组是一 ...
- windows编程中wParam和lParam消息
windows编程中wParam和lParam消息 1.WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高. 2 滚动条WM_VSCROLL或WM ...
- 【转】windows程序设计(14):鼠标消息详解
关于鼠标的一些细节知识: 通常,我们发消息时,都是对一个特定的窗口,但是对于鼠标消息却不然:只要鼠标跨越窗口或者在某窗口中按下鼠标按键,那么窗口消息处理程序就会收到鼠标消息,而不管该窗口是否活动或者是 ...
最新文章
- java string 占位符_驳《阿里「Java开发手册」中的1个bug》?
- windows下一个,OracleServiceXXX和Oracle 关系实例
- [TypeScript] Deeply mark all the properties of a type as read-only in TypeScript
- java反射--注解的定义与运用以及权限拦截
- 记录自己灵感闪现的开发语录 每日更新 记录变强或者变得更菜的过程
- java三目运算符简化代码_如何使用传播运算符简化代码
- asp.net网站的配置文件
- 辐射避难所买了东西显示服务器异常,辐射避难所常见问题汇总 专治疑难杂症...
- 在运行hadoopdb\hive\hadoop源码时不能正确调用自定义core-site.xml等配置文件
- JavaScript基础---语言基础(4)
- 怎么用xmind整理我们获取的杂乱的信息
- CSDN账号注销的问题:手机号注册的CSDN号是可以注销的
- 周立功串口服务器维修方法,周立功医生| 告诉你RS485通信的小秘密
- 杰奇为什么只能用php5.2,若夏小说新版 杰奇最新2.2专业版内核 WAP端+电脑端+在线充值+关关采集器(送规则)...
- 波兰表达式和逆波兰表达式
- 人工神经网络心得体会_人工智能学习心得
- java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more tha
- 主要计算机硬件部件,计算机硬件各部件的主要功能
- stm32过零检测电路
- C++ 域名转IP地址
热门文章
- ie下面出现Notice: Undefined index: HTTP_REFERER 的解决办法
- cron计划任务使用
- 破解ERP的使用成本之谜
- Mac无损音乐播放器Audirvana plus
- Android进阶:十三、自定义类加载器加载加密类文件
- Beaker:一个基于Electron的点对点Web浏览器
- [case39]聊聊jdk httpclient的executor
- python学习第一模块练习
- 一天一个设计模式(3)——单例模式
- 音频数据文件格式(PCM,WAV,MIDI)简记