LOWORD(wParam) 与 HIWORD(wParam) 详解

书籍:《Visual C++ 2017从入门到精通》的2.3.8 Win32控件编程

环境:visual studio 2022

内容:【例2.29】模拟对话框

说明:以下内容大部分来自腾讯元宝。

1. 基本概念与作用

LOWORD 和 HIWORD 是 Windows API 中用于分解 32 位参数的宏,主要用于解析 wParam 或 lParam 的高低 16 位数据。其核心功能包括:

  • 数据拆分:将 32 位整数拆分为低 16 位(LOWORD)和高 16 位(HIWORD),便于分别处理不同部分的信息。
  • 消息解析:在 Windows 消息处理中,wParam 和 lParam 常携带复合信息,通过这两个宏可快速提取关键参数(如控件 ID、通知码、坐标等)。

2. 宏定义与实现

  • LOWORD
    宏定义:

    #define LOWORD(l) ((WORD)(l)) 

    作用:提取 l 的低 16 位(即右边的 16 位),结果为 WORD 类型(0~65535)。

    示例:若 wParam = 0x12345678,则 LOWORD(wParam) = 0x5678
  • HIWORD
    宏定义:

    #define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF)) 

    作用:提取 l 的高 16 位(即左边的 16 位),结果为 WORD 类型。

    示例:若 wParam = 0x12345678,则 HIWORD(wParam) = 0x1234

3. 在消息处理中的应用

Windows 消息(如 WM_COMMANDWM_MOUSEWHEEL 等)的 wParam 和 lParam 常通过这两个宏传递复合信息,典型场景包括:

  1. ​**WM_COMMAND 消息**

    • LOWORD(wParam):控件 ID(如按钮、菜单项的标识符)。
    • HIWORD(wParam):通知码(标识具体事件类型,如按钮点击 BN_CLICKED)。
      示例
    case WM_COMMAND:if (LOWORD(wParam) == IDOK) { // 按钮 ID 为 IDOKif (HIWORD(wParam) == BN_CLICKED) { // 通知码为点击事件// 处理确定按钮点击}}break;
  2. ​**WM_MOUSEWHEEL 消息**

    • LOWORD(wParam):指示鼠标键及组合键状态(如 MK_CONTROL)。
    • HIWORD(wParam):滚轮滚动量(120 表示向上滚动一行)。
      示例
    case WM_MOUSEWHEEL:int zDelta = HIWORD(wParam); // 获取滚动量if (LOWORD(wParam) & MK_CONTROL) { // 检测是否按住 Ctrl 键// 按住 Ctrl 时的特殊处理}break;
  3. 滚动条消息(WM_VSCROLL/WM_HSCROLL)​

    • LOWORD(wParam):滚动操作类型(如 SB_THUMBTRACK 表示拖动滑块)。
    • HIWORD(wParam):附加参数(如滚动步长)。

4. 典型应用场景

  1. 控件事件处理
    通过 LOWORD 和 HIWORD 快速定位控件 ID 和事件类型,避免手动位运算。

    case WM_COMMAND:if (HIWORD(wParam) == BN_CLICKED) {switch (LOWORD(wParam)) {case IDC_BUTTON1: // 处理按钮1点击break;case IDC_BUTTON2: // 处理按钮2点击break;}}break;
  2. 坐标解析
    在鼠标消息(如 WM_LBUTTONDOWN)中,lParam 包含坐标信息,需通过 LOWORD 和 HIWORD 分离:

    case WM_LBUTTONDOWN:int x = LOWORD(lParam); // 客户区 X 坐标int y = HIWORD(lParam); // 客户区 Y 坐标break;
  3. 菜单与加速键

    • 菜单消息LOWORD(wParam) 为菜单项 ID,HIWORD 为选择标识。
    • 加速键LOWORD(wParam) 为加速键 ID,HIWORD 为标志(如 1 表示加速键)。

5. 注意事项

  • 数据范围LOWORD 和 HIWORD 的结果均为 WORD 类型(0~65535),超出范围会导致截断。
  • 跨平台兼容性:这两个宏是 Windows 特有实现,移植到其他系统需自行实现类似逻辑。
  • 消息类型差异:不同消息的 wParam 和 lParam 含义不同,需结合具体消息类型解析。

总结

LOWORD 和 HIWORD 是 Windows 编程中解析消息参数的核心工具,通过拆分 32 位数据简化了控件交互、事件处理等场景的逻辑。开发者需根据具体消息类型,合理利用这两个宏提取关键信息,同时注意数据范围和跨平台限制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32946.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仿TikTok推荐系统开发与部署

目录 1、对H&M零售数据集的简要介绍 2、个性化推荐的核心范式 3、引入双塔嵌入模型 4、理解4阶段推荐架构 4.1 第一阶段 4.2 第二阶段 4.3 第三阶段 4.4 第四阶段 5、将4阶段架构应用于我们的H&M案例 6、特征/训练/推理(FTI)架构 7、…

<03.13>八股文补充知识

import java.lang.reflect.*; public class Main {public static void main(String[] args) throws Exception {// 获取 Class 对象//1. 通过类字面量Class<?> clazz Person.class;//2 通过对象实例化String str "Hello";Class<?> clazz_str str.ge…

windows系统,pycharm运行.sh文件

博主亲身试验过&#xff0c;流程简单&#xff0c;可用。 需要pycharm &#xff0c;git。 注意需要Git Bash.exe &#xff0c;也就是Git Bash的应用程序&#xff0c;而不是快捷方式。 需要把这个应用程序的路径复制一下。可以通过右键&#xff0c;复制文件地址的方式。 接着在…

新闻网页信息抽取

1. 网页信息抽取 问题定义&#xff1a;对新闻网页&#xff08;输入为HTML&#xff09;提取结构化信息&#xff0c;包括标题、发布时间、作者、正文、图片等。 动机&#xff1a;由于网页&#xff08;大多数为HTML格式&#xff09;通常带有很多标签、样式、脚本等信息&#xff0…

Attention又升级!Moonshot | 提出MoE注意力架构:MoBA,提升LLM长文本推理效率

源自: AINLPer&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-13 更多&#xff1a;>>>>大模型/AIGC、学术前沿的知识分享&#xff01; 引言 对于大模型来说&#xff0c;有效扩展上下文长度对于实现通用…

人工智能与我何干

思考一下&#xff0c; 如果打破这样的磁场&#xff0c;当我焦虑的时候&#xff0c;总是想要看一些负面的内容&#xff0c;这是错误的&#xff0c;不应该这样做&#xff0c;要坚定自己的信念&#xff0c;我为什么和人工智能去争抢呢&#xff0c;不能和人工智能争抢&#xff0c;这…

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…

智能三防手持终端破解传统仓储效率困局

在数字化浪潮的推动下&#xff0c;传统仓储管理模式正面临效率低、成本高、错误频发等瓶颈。如何实现精准、高效、智能化的仓储管理&#xff0c;上海岳冉三防智能手持终端机以RFID技术为核心&#xff0c;结合工业级三防&#xff08;防水、防摔、防尘&#xff09;设计&#xff0…

13. Pandas :使用 to_excel 方法写入 Excel文件

一 to_excel 方法的相关参数 用它来指定要将 DataFrame 写入哪些工作表的哪些单元格&#xff0c;以及是否需要包含列标题和 DataFrame 索引。如何处理特殊值&#xff08;如 np.nan 和 np.inf&#xff09;。 1.指定工作表和单元格 sheet_name&#xff1a;指定将 DataFrame 写入的…

星越L_发动机舱开启及油液加注讲解

目录 1.拉手 2打开前机盖 3.冷却液加注口 4.玻璃水加注口 5.机油加注口 6.刹车油加注口 7.电瓶 1.拉手 中控台左下方有个拉手,拉动两次前机盖解锁。 2打开前机盖 向上抬打开前机盖。 3.冷却液加注口

基于Flink SQL的实时指标多维分析模型

数据流程介绍 1.创建源表kafka接入消息队列数据&#xff0c;定义字段映射规则&#xff1b; 2.创建目标表es_sink配置Elasticsearch输出&#xff1b; 3.通过多级视图&#xff08;tmp→tmp_dedup→tmp1/tmp2→tmp3→tmp_groupby&#xff09;实现数据清洗、去重、状态计算&#x…

专题|Python贝叶斯金融数据应用实例合集:随机波动率SV模型、逻辑回归、参数更新、绩效比较BEST分析亚马逊股票、普尔指数...

原文链接&#xff1a;https://tecdat.cn/?p41020 本专题合集系统梳理了贝叶斯方法在金融数据分析与分类建模中的前沿应用。合集聚焦于PyMC3概率编程框架&#xff0c;深度探讨了共轭先验参数更新、贝叶斯逻辑回归、贝叶斯夏普比率等核心算法在实际场景中的落地实践&#xff08;…

qwen2.5-vl使用vllm部署gradio页面调用

想在服务器上用vllm部署qwen2.5-vl, 然后使用gradio页面在本地调试&#xff0c;官方代码给了两条命令&#xff0c;列出的request body体结构&#xff0c; 不过要与gradio连用&#xff0c; 还需要重新组织代码。 官方服务代码如下&#xff1a; vllm serve Qwen/Qwen2.5-VL-7B-I…

论文笔记 - ULTRA-SPARSE MEMORY NETWORK

1、目前Transformer模型现状 dense模型相同激活参数下&#xff0c;性能远低于MOE模型&#xff0c;因此大家倾向于训练MOE模型虽然同激活参数下&#xff0c;MOE性能比dense好&#xff0c;但MOE模型内存访问高&#xff0c;因此推理速度相比dense要慢不少。比如top2的moe&#xf…

人工智能基础知识笔记四:聚类分析

1、什么是聚类分析&#xff1f; 聚类分析是一种将数据分组的技术&#xff0c;目的是让同一组内的数据点彼此相似&#xff0c;而不同组之间的数据点差异较大。你可以把它想象成整理一堆杂乱无章的物品&#xff0c;把相似的物品放在一起&#xff0c;比如把书放在一个书架&#x…

DeepSeek结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)转载

思维速览&#xff1a; 本文将详细介绍如何利用DeepSeek结合Mermaid语法绘制各类专业图表&#xff0c;帮助你提高工作效率和文档质量。 ▍DeepSeek入门使用请看&#xff1a;deepseek保姆级入门教程&#xff08;网页端使用 本地客户端部署 使用技巧&#xff09; DeepSeek官网…

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题&#xff0c;为保障系统安全&#xff0c;需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4&#xff0c;以规避潜在风险&#xff0c;提升系统整体的安全性和稳定性。 1.1 本…

关于我和快速幂的事()

我之前只会这样的(dfs&#xff09;&#xff1a; 不懂下面这种写法的具体逻辑&#xff1a; 看完下面的推理&#xff0c;再转转我聪明的小老戴&#xff1a; 法一中&#xff1a;把2^11看成(2^5)^2 法二中&#xff1a;把2^11看成(2^2)^5

CSS3-流星雨

1. 绘制标签 <div class"container"><span></span> </div>2. 设置div背景 在百度上搜索一幅星空的图片 <style>* {/* 初始化 */margin: 0;padding: 0;}body {/* 高度100% */height: 100vh;/* 溢出隐藏 */overflow: hidden;}.contai…

P3390 【模板】矩阵快速幂

把 f&#xff08;ll k&#xff09; 写成 f&#xff08;int k&#xff09; 结果又是tle又是wa的。找了半天错误。 &#xff08;为了节省一点时间&#xff0c;因为函数不能return数组&#xff0c;还把数组改写到结构体里&#xff09; 我在想考试怎么办&#xff0c;考试不能看过…