忙起来的时候感觉什么都不缺,空下来以后才发现什么都没有。。。
---- 网易云热评
一、基本鼠标消息
WM_LBUTTONDOWN - 鼠标左键按下
WM_LBUTTONUP - 鼠标左键抬起
WM_RBUTTONDOWN - 鼠标右键按下
WM_RBUTTONUP - 鼠标右键抬起
WM_MOUSEMOVE - 鼠标移动消息
1、消息参数:
WPARAM,其他按键的状态,例如Ctrl/Shift等
LPARAM, 鼠标的位置,窗口客户区坐标系。
LOWORD,X坐标位置
HIWORD,Y坐标位置,
2、鼠标消息使用:
一般情况鼠标按下/抬起成对出现。在鼠标移动过程中,会根据移动速度产生一系列的WM_MOUSEMOVE消息。
3、相关代码:
case WM_MOUSEMOVE:
//鼠标移动(hWnd,lParam);
break;
case WM_PAINT:
绘图(hWnd);
break;
case WM_LBUTTONDOWN:
左键按下(hWnd,wParam,lParam);
break;
case WM_LBUTTONUP:
左键抬起(hWnd, wParam, lParam);
break;
void 左键按下(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
wchar_t str[256] = { 0 };
swprintf_s(str, L"左键按下:键盘状态:%08X,鼠标坐标(X:%d,Y:%d)\n",wParam,LOWORD(lParam),HIWORD(lParam) );
WriteConsole(g_DOS窗口句柄, str, wcslen(str), NULL, NULL);//DOS显示
}
void 左键抬起(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
wchar_t str[256] = { 0 };
swprintf_s(str, L"左键抬起:键盘状态:%08X,鼠标坐标(X:%d,Y:%d)\n", wParam, LOWORD(lParam), HIWORD(lParam));
WriteConsole(g_DOS窗口句柄, str, wcslen(str), NULL, NULL);//DOS显示
}
void 绘图(HWND hWnd)
{
PAINTSTRUCT p = { 0 };
HDC hdc = BeginPaint(hWnd, &p);
TextOut(hdc, g_x, g_y, L"哎呦", 2);
EndPaint(hWnd, &p);
}
void 鼠标移动(HWND hWnd, LPARAM lParam)
{
g_x = LOWORD(lParam);
g_y = HIWORD(lParam);
InvalidateRect(hWnd, NULL, TRUE);
}
4、运行结果:
二、双击消息
WM_LBUTTONDBLCLK - 鼠标左键双击
WM_RBUTTONDBLCLK - 鼠标右键双击
1、消息参数:
WPARAM,其他按键的状态,例如Ctrl/Shift等
LPARAM ,鼠标的位置,窗口客户区坐标系。
LOWORD,X坐标位置
HIWORD,Y坐标位置
使用时需要在注册窗口类的时候添加CS_DBLCLKS 风格,否则窗口接收不到双击消息
wc.style = CS_HREDRAW | CS_VREDRAW|CS_DBLCLKS; //窗口变化,会重绘,窗口类的一般风格
2、消息产生顺序:
以WM_LBUTTONDBLCLK为例:WM_LBUTTONDOWN,WM_LBUTTONUP, WM_LBUTTONDBLCLK,WM_LBUTTONUP
3、相关代码
case WM_LBUTTONDBLCLK:
左键双击(hWnd,wParam,lParam);
break;
?
void 左键双击(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
wchar_t str[256] = { 0 };
swprintf_s(str, L"左键双击:键盘状态:%08X,鼠标坐标(X:%d,Y:%d)\n", wParam, LOWORD(lParam), HIWORD(lParam));
WriteConsole(g_DOS窗口句柄, str, wcslen(str), NULL, NULL);//DOS显示
}
4、运行结果
三、滚轮消息
WM_MOUSEWHEEL - 鼠标滚轮消息
1、消息参数:WPARAM
LOWORD,其他按键的状态
HIWORD,滚轮的偏移量,是120的倍数,通过正负值表示表示滚动方向。
正:向前滚动
负:向后滚动
LPARAM:鼠标当前的位置,屏幕坐标系
LOWORD:X坐标
HIWORD:Y坐标
2、使用:通过偏移量,获取滚动的方向和倍数。
3、相关代码
case WM_MOUSEWHEEL:
滚轮滑动(hWnd,wParam,lParam);
break;
void 滚轮滑动(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
short 偏移量 = HIWORD(wParam); // 偏移量,将无符号转为有符号
wchar_t str[256] = { 0 };
swprintf_s(str, L"滚轮滑动 -- 按键状态:%08X,偏移量:%d,鼠标坐标(%d,%d)\n",
LOWORD(wParam),偏移量,LOWORD(lParam),HIWORD(lParam));
WriteConsole(g_DOS窗口句柄, str, wcslen(str), NULL, NULL);
}
4、运行结果