一篇文章学会用户自定义消息及层次划分

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

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

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

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

>窗口管理器处理 WM_USER 之下的消息。

> 窗口类的实现者处理 WM_USER 到 WM_APP – 1 之间的消息。

> 应用程序(具体来说,就是创建窗口的代码)处理 WM_APP 到 MAXINTATOM – 1 之间的消息。

> 所有其他组件通过 RegisterWindowMessage 处理 MAXINTATOM 到 MAXWORD 之间的消息。

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

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

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

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

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

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

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

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

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

总结

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

责任编辑:武晓燕 来源: 今日头条
相关推荐

2017-09-05 08:52:37

Git程序员命令

2021-07-01 10:01:16

JavaLinkedList集合

2021-06-21 06:32:04

Python异常传递s自定义异常

2022-08-04 09:39:39

Kubernetes声明式系统

2017-06-27 14:15:22

LinuxShellsed

2022-08-03 08:17:00

Redis事务内存

2023-06-15 10:11:08

JavaScript函数表达式

2022-05-27 07:49:14

RocketMQ消息中间件分布式

2020-10-09 08:15:11

JsBridge

2021-12-07 08:50:40

字母区间字符串

2023-05-12 08:19:12

Netty程序框架

2022-02-21 09:44:45

Git开源分布式

2019-04-17 15:16:00

Sparkshuffle算法

2021-04-09 08:40:51

网络保险网络安全网络风险

2021-06-30 00:20:12

Hangfire.NET平台

2021-01-29 18:41:16

JavaScript函数语法

2020-11-10 10:48:10

JavaScript属性对象

2021-02-02 18:39:05

JavaScript

2020-10-22 08:25:22

JavaScript运作原理

2019-01-09 10:04:16

点赞
收藏

51CTO技术栈公众号