win32编程 -- 鼠标消息

简介: win32编程 -- 鼠标消息

一、基本鼠标消息


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


0a2653c851af460fa595bd959398a8f1.png


二、双击消息        

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


0eacb84100b54626af849e6b562bf92a.png


三、滚轮消息        


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

0a2653c851af460fa595bd959398a8f1.png

目录
相关文章
|
6月前
|
Windows
win32编程 -- 消息机制(一)
win32编程 -- 消息机制(一)
45 0
MASM32编程演示程序在窗口模式和全屏模式间切换
MASM32编程演示程序在窗口模式和全屏模式间切换
|
6月前
win32编程 -- 模式对话框
win32编程 -- 模式对话框
38 1
|
6月前
win32编程 -- 鼠标消息
win32编程 -- 鼠标消息
39 0
|
6月前
win32编程 -- 键盘消息
win32编程 -- 键盘消息
48 0
|
6月前
win32编程 -- 无模式对话框
win32编程 -- 无模式对话框
35 0
|
6月前
win32编程 -- 窗口中字符串移动
win32编程 -- 窗口中字符串移动
34 0
|
6月前
win32编程 -- 窗口注册与创建
win32编程 -- 窗口注册与创建
51 0
|
6月前
|
消息中间件
win32编程 -- 消息机制(三)
win32编程 -- 消息机制(三)
40 0
Qt实用技巧:将QWidget作为输入窗口,接收键盘消息、输入法并且控制输入法悬浮工具栏位置控制
Qt实用技巧:将QWidget作为输入窗口,接收键盘消息、输入法并且控制输入法悬浮工具栏位置控制