和鼠标相关的三个属于: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

 #include<Windows.h>
#include<WinUser.h>
#include<tchar.h>
#include<stdio.h> LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
{
WNDCLASS WndClass;
TCHAR* ClassName = TEXT("MyClass");
HWND hwnd;
MSG msg; WndClass.cbClsExtra = ;
WndClass.cbWndExtra = ;
WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + );
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInst;
WndClass.lpfnWndProc = WindProc;
WndClass.lpszClassName = ClassName;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_VREDRAW | CS_HREDRAW; RegisterClass(&WndClass);
hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, , , NULL, NULL, hInst, NULL);
ShowWindow(hwnd, nShow);
UpdateWindow(hwnd); while (GetMessage(&msg, NULL, , ))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return ;
} LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT pt;
TCHAR *rectwords = TEXT("我在学习鼠标消息");
static int i;
switch (message)
{
case WM_CREATE:
return ;
case WM_SIZE:
return ;
case WM_PAINT:
hdc = BeginPaint(hwnd, &pt);
Rectangle(hdc, , , , );
if (i)
{
TextOut(hdc, , , rectwords, _tcslen(rectwords));
}
EndPaint(hwnd, &pt);
return ;
case WM_CHAR:
return ;
case WM_LBUTTONUP:
i = ;
InvalidateRect(hwnd, NULL, TRUE);
return ;
case WM_LBUTTONDOWN:
InvalidateRect(hwnd, NULL, TRUE);
if (LOWORD(lParam)> && LOWORD(lParam)< && HIWORD(lParam)> && HIWORD(lParam)<)
{
i = ;
}
return ;
case WM_MOUSEMOVE:
hdc = GetDC(hwnd);
if (wParam&MK_LBUTTON)
{
SetPixel(hdc, LOWORD(lParam), HIWORD(lParam), );
}
ReleaseDC(hwnd, hdc);
return ;
case WM_DESTROY:
PostQuitMessage();
return ;
default:
break;
} return DefWindowProc(hwnd, message, wParam, lParam);
}

最新文章

  1. CSS控制文字,超出部分显示省略号
  2. 智能车学习(五)&mdash;&mdash; dac学习
  3. xml文件读写
  4. jsp页面中的java代码
  5. HDU 4749 Parade Show 2013 ACM/ICPC Asia Regional Nanjing Online
  6. QT 读写sqllite数据库
  7. Python数据结构之二叉树
  8. SecureCRT使用Vim出现中文乱码问题的解决
  9. 最长公共子序列poj1458
  10. xamarin.forms之使用CarouselView插件模仿网易新闻导航
  11. Android 解析标准的点击第三方文件管理器中的视频的intent
  12. java_31 数据表的操作
  13. Linux 任务计划 crontab 配置概要与常见问题
  14. 在UnrealEngine中用Custom节点实现马赛克效果
  15. 微信企业号-根据code获取成员信息(过期code)
  16. sublime package control INSTALLATION
  17. Dubbo多版本
  18. centos7/linux 磁盘管理入门
  19. 【LOJ】#2230. 「BJOI2014」大融合
  20. 机器学习-数据可视化神器matplotlib学习之路(四)

热门文章

  1. 第三方框架----FMDB的使用
  2. CEIWEI CheckSum CRC校验精灵v2.1 CRC3/CRC4/CRC5/CRC6/CRC8CRC10/CRC11/CRC16/CRC24/CRC32/CRC40/CRC64/CRC82/Adler32
  3. eNSP——OSPF的基础配置
  4. GB和GIB的区别
  5. php 将图片文件转成base64编码的方法
  6. hadoop WordCount例子详解。
  7. 数据库数据生成Excel表格(多用在导出数据)
  8. springcloud超简单的入门3--负载均衡
  9. Office 2016、2019 与 Office 365 的区别
  10. Nginx学习笔记(三):Nginx 请求处理