用户自定义消息及层次划分

news2025/1/15 12:45:29

有些人对术语 WM_USER 表示消息范围基的名称有不同的意见,因为 WM_USER 是由窗口类的实现者来定义的。他们抱怨的是,用户不能使用它们,因为它们属于窗口类定义的一部分。

但是,问题是,”这里的用户是谁?” 换句话说,当我们说”用户自定义”这个词的时候,做自定义操作的这个用户到底是指谁?

在上面这个问题中,总共有四个不同的组件涉及其中,每个组件都有它自己的消息范围。

> 窗口管理器处理 WM_USER 之下的消息。
> 窗口类的实现者处理 WM_USER 到 WM_APP – 1 之间的消息。
> 应用程序(具体来说,就是创建窗口的代码)处理 WM_APP 到 MAXINTATOM – 1 之间的消息。
> 所有其他组件通过 RegisterWindowMessage 处理 MAXINTATOM 到 MAXWORD 之间的消息。

用户是谁?这取决于你是站在哪个角度来如何理解这个问题的。

从窗口管理器的角度来看,窗口类的实现者是用户,因为窗口类的代码会调用窗口管理器。

从窗口类的实现者的角度来看,应用程序是用户,因为它调用了窗口类。

那如果从应用程序的角度来看,所有的外部代码就是用户了,因为外部代码会调用应用程序。

相反,你可以“向上”查找列表,并观察到从每个组件的角度来看,属于其上方组件的消息是“保留”的。

从类实现者的角度来看,窗口管理器消息是保留的。从应用程序的角度来看,类实现者的消息是保留的。从所有外部程序的角度来看,应用程序的消息是保留的。
让我们来看看下图,帮助理解。

>> 请移步至 topomel.com 以查看图片 <<

每个框将属于其内框的消息视为保留;相反,每个内框将下一个外框视为其“用户”。

由于 winuser.h 头文件是由窗口管理器团队编写的,因此他们从窗口管理器的角度看世界也就不足为奇了。因此,窗口管理器外部的所有内容都是“用户定义的”,窗口管理器内部的所有内容都是“保留的”。

当然,如果从类实现者的角度来看,那么“保留”和“用户”这两个词的上下文就会发生变化。例如,你可以在对话框常量 DWLP_USER 中看到这一点,该常量是对话框的“用户”可以使用的窗口字节的索引;即,通过应用程序的对话过程。

总结

简化一个复杂的问题,可以通过划分层次的思路来将其分成一个一个的小问题。
人生也是如此。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《When something is available for the user, which user are we talking about?》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mybatis小白从0到90%精讲】10:Mybatis动态SQL:foreach、choose标签

文章目录 前言一、foreach 标签二、choose、when、otherwise 标签前言 动态SQL 是 Mybatis的亮点功能之一,如果你经历过 拼接SQL 的繁琐痛苦,那么你就能切身感受到动态SQL到底有多爽!真香哈~ 另外,Mybatis将动态SQL设计的如此自然,让人看看就能理解和接受,我想这也是My…

谁说 Linux 不能玩游戏?

在上个世纪最早推出视频游戏的例子是托马斯戈德史密斯&#xff08;Thomas T. Goldsmith Jr.&#xff09;于1947年开发的“「Cathode Ray Tube Amusement Device」”&#xff0c;它已经显着发展&#xff0c;并且已成为人类生活中必不可少的一部分。 通过美国游戏行业的统计数据&…

【iOS】知乎日报前三周总结

这几天一直在进行知乎日报的仿写&#xff0c;仿写过程中积累了许多实用的开发经验&#xff0c;并对MVC有了更深的了解&#xff0c;特撰此篇作以总结 目录 第一周将网络请求封装在一个单例类Manager中SDWebImage库的简单使用运用时间戳处理当前时间自定义NavigationBar 第二周在…

求极限Lim x->0 (x-sinx)*e-²x / (1-x)⅓

题目如下&#xff1a; 解题思路: 这题运用了无穷小替换、洛必达法则、求导法则 具体解题思路如下: 1、首先带入x趋近于0&#xff0c;可以得到&#xff08;0*1&#xff09;/0&#xff0c;所以可以把e的-x的平方沈略掉 然后根据无穷小替换&#xff0c;利用t趋近于0时&#xf…

容器核心技术-Namespace

一、容器 基于Linux 内核的 Cgroup&#xff0c; Namespace&#xff0c;以及Union FS等技术&#xff0c;对进程进行封装隔离&#xff0c;属于操作系统层面的虚拟化技术&#xff0c;由于隔离的进程独立于宿主和其它的隔离的进程&#xff0c;因此也称其为容器。 1.1 容器主要特性…

皮肤病辅助诊断软件,基于Android编写

1.系统介绍 编写的皮肤病辅助诊断软件&#xff0c;包括皮肤病识别、皮肤病区域分割、皮肤病信息介绍、识别历史记录查询、简单图像处理操作以及本机信息查询等功能 2.登录界面 运行之后首先显示登录界面 3.注册界面 注册一个账号 4.主界面 输入用户名密码点击登录按钮…

C语言——通讯录管理系统2.0版

对比之前C语言——通讯录管理系统初始版本&#xff0c;2.0版本有以下优化&#xff1a; 1.采用链表实现&#xff08;之前版本是顺序表实现的&#xff0c;导致通讯录容量有限&#xff0c;现在使用链表实&#xff0c;实现了动态开辟空间&#xff0c;不浪费空间&#xff0c;也不会出…

用于3D Visual Grounding的多模态场景图

文章目录 引言方法1. Language Scene Graph Module Paper&#xff1a;《Free-form Description Guided 3D Visual Graph Network for Object Grounding in Point Cloud》【ICCV’2021】 Code&#xff1a;https://github.com/PNXD/FFL-3DOG 引言 3DVG任务有以下三个挑战&#x…

关于笔记平台的使用感受分享

关于笔记平台的使用感受分享 前言我用过的笔记平台笔记平台简单评价巴拉巴拉WPS文档/OneNote/TowerNotion/语雀各种博客平台 个人使用率最高的平台 前言 最近也有部分同学问我平常用的笔记平台是什么&#xff0c;以及我比较推荐的平台是什么。这里不是广告哈&#xff0c;因为我…

Spring AOP 简介

一、Spring AOP AOP 是一种思想&#xff0c;而 Spring AOP 是一个框架&#xff0c;提供了一种对 AOP 思想的实现。 1、什么是 AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;是一种编程思想&#xff0c;表示面向切面编程。指的是对某…

<Vue>使用依赖注入的方式共享数据

什么是vue依赖注入&#xff1f; Vue是一个用于构建用户界面的渐进式框架。 它提供了一种简单而灵活的方式来管理组件之间的数据流&#xff0c;即依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;。 依赖注入是一种设计模式&#xff0c;它允许一个组件从另一…

【数组】有序数组的平方

## 977.有序数组的平方 力扣题目链接 (opens new window) 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10]输出&#xff1a;[0,…

升级Python版本后,anaconda navigator启动失败

anaconda navigator启动失败&#xff0c;尤其是重装不解决问题的&#xff0c;大概率是库冲突 1.通过anaconda-navigator的图标启动&#xff0c;没有反应 2.在命令窗口&#xff0c;输入anaconda-navigator&#xff0c;报错如下 anaconda-navigator 3.错误来自这里 File &quo…

基于单片机的胎压监测系统的设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、系统整体设计方案二、 系统设计4.1 主流程图 三 系统仿真5.1 系统仿真调试实物 四、 结论 概要 本文以STC89C52单片机为控制核心&#xff0c;通过气压传感器模块对汽车各轮胎的胎压进行实时数据的采集与处理&…

AD教程 (七)元件的放置

AD教程 &#xff08;七&#xff09;元件的放置 第一种放置方法 点击右下角Panels&#xff0c;选择SCH Library&#xff0c;调出原理图库器件列表选中想要放置的元件&#xff0c;点击放置&#xff0c;就会自动跳转到原理图&#xff0c;然后放置即可这种方法需要不断打开元件库…

【源码解析】Spring Bean定义常见错误

案例1 隐式扫描不到Bean的定义 RestController public class HelloWorldController {RequestMapping(path "/hiii",method RequestMethod.GET)public String hi() {return "hi hellowrd";}}SpringBootApplication RestController public class Applicati…

立创eda专业版学习笔记(7)(阻焊开窗)

阻焊开窗是什么&#xff1f; 在介绍阻焊开窗之前&#xff0c;我们首先要知道阻焊层是什么。阻焊层是指印刷电路板子上要上油墨的部分&#xff0c;用于覆盖走线和敷铜&#xff0c;以保护PCB上的金属元素和防止短路。阻焊开窗是指在阻焊层上开一个口&#xff0c;以便在开口的位置…

前馈神经网络自动梯度计算和预定义算子

目录 1 自动梯度计算和预定义算子 1.1 利用预定义算子重新实现前馈神经网络 1.2 完善Runner类 1.3 模型训练 1.4 性能评价 1.5 增加一个3个神经元的隐藏层&#xff0c;再次实现二分类&#xff0c;并与1.1.1做对比. 1.6 自定义隐藏层层数和每个隐藏层中的神经元个数&#xf…

【网络安全技术】公钥密码体制

一、两种基本模型 1.加密模型 A要给B发信息&#xff0c;那就拿B的公钥加密&#xff0c;传给B&#xff0c;B收到后会拿他自己的私钥解密得到明文。 2.认证模型&#xff08;数字签名&#xff09; A用自己的私钥加密&#xff0c;传输之后&#xff0c;别人拿A的公钥解密&#xff…

IMU漂移相关

个人对IMU的漂移一直以来都很困惑&#xff0c;总结整理了这些材料&#xff0c;希望能理清楚一点思路。 总的来讲&#xff0c;IMU的漂移可建模为三部分&#xff0c;随机常值相关漂移白噪声&#xff0c; 但实际使用时&#xff0c;三者都出现的用法很少。严恭敏老师在博客中有相关…