一、参数概述
wparam是Windows操作系统中消息处理机制中一个重要的参数,它一般用于携带消息的附加数据和控制消息的行为。具体而言,wparam的数据类型是WPARAM,它是一个32位无符号整数,其值的含义、作用以及处理方式根据发送或接收的消息不同而不同。
消息机制是Windows操作系统的核心机制之一,它实现了进程间通信的基础。消息机制是指通过消息传递的机制来实现进程间数据和通信的一种方式。在Windows系统中,消息机制是通过发送和接收消息进行的。发送消息的窗口将一个消息传递给接收消息的窗口,这个传递的过程就是消息机制。
二、常见消息中的wparam参数详解
1. WM_COMMAND 消息
wParam参数: 如果命令是加速键,则此值为加速键的 ASCII 字符值。例如,如果用户按下 ALT+F,则 wParam 将为 'F'。 如果命令来自控件,则此值是控件的标识符。当然,如果您的应用程序由多个对话框组成,则需要相应地修改标识符。 否则,此值是菜单项的标识符。如果系统菜单被选中,则此值是包含菜单项的菜单的句柄。
2. WM_KEYDOWN 消息
wParam参数: 重复计数(位30-16) —— 重复计数指定如何处理自动重复击键。当用户按住一个键时,系统将在短时间内重复发送相同的消息。由于这可能会导致性能下降,因此 Windows 将尝试根据用户的键盘速度和重复延迟来动态选择重复计数。如果应用程序不处理此消息,那么应用程序将接收一系列 WM_KEYDOWN 和 WM_KEYUP 消息,以指示用户有哪些键被按下。 扩展键(位24) —— 如果是扩展键,则此位设置为 1。 先前键状态(位0) —— 该位指示这个键是在上一次事件中被按下还是被放开。该位被设置为 1,以指示键是在上一次事件中被释放的。完整的键状态信息可在消息的 lParam 参数中获得。
3. WM_LBUTTONDOWN 消息
wParam参数:在这种情况下,此参数没有意义。
4. WM_PAINT 消息
wParam参数: 如果更新区已被擦除,则此值为非零。否则它的值为零。
5. WM_NCLBUTTONDOWN 消息
wParam参数: 与 WM_LBUTTONDOWN 消息的 wParam 参数相同。然而,在 WM_NCLBUTTONDOWN 消息中,这个值指示了按下的鼠标键,可以是下面列出的值之一: WPARAM 鼠标键 MK_LBUTTON 左键 MK_RBUTTON 右键 MK_SHIFT SHIFT 键 MK_CONTROL CTRL 键 MK_MBUTTON 中间键 MK_XBUTTON1 X1 鼠标键 MK_XBUTTON2 X2 鼠标键
三、代码示例
case WM_COMMAND: { int wmId = LOWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } } break; case WM_KEYDOWN: { switch (wParam) { case VK_RIGHT: xSpeed = 1; ySpeed = 0; break; case VK_LEFT: xSpeed = -1; ySpeed = 0; break; case VK_UP: xSpeed = 0; ySpeed = -1; break; case VK_DOWN: xSpeed = 0; ySpeed = 1; break; default: break; } } break; case WM_LBUTTONDOWN: { // do something } break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); } break; case WM_NCLBUTTONDOWN: { if (wParam == MK_LBUTTON) { // do something } } break;
四、结语
通过对wparam参数的详细阐述和常见消息中对wparam参数的应用,我们可以更加深刻地理解Windows操作系统中消息机制的实现原理,提高对消息处理的认识和技能。
原创文章,作者:EWNVW,如若转载,请注明出处:https://www.506064.com/n/369348.html