忙起来的时候感觉什么都不缺,空下来以后才发现什么都没有。。。

----  网易云热评

一、基本鼠标消息

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、运行结果:

win32编程 -- 鼠标消息_win32编程

二、双击消息         

 

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、运行结果

win32编程 -- 鼠标消息_偏移量_02

三、滚轮消息         

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、运行结果

win32编程 -- 鼠标消息_窗口句柄_03

欢迎关注公众号:顺便编点程

win32编程 -- 鼠标消息_鼠标坐标_04

 

win32编程 -- 鼠标消息_偏移量_05