通俗的理解MFC消息机制
1. 消息是什么?
想象你家的门铃响了(比如有人按门铃、敲门、或者有快递),这些都是“消息”。
在 MFC 中,消息就是系统或用户触发的各种事件,比如鼠标点击(WM_LBUTTONDOWN
)、键盘输入(WM_KEYDOWN
)、窗口关闭(WM_CLOSE
)等。
2. MFC 的消息机制如何工作?
整个过程分三步走,类似“快递收发站”:
(1) 消息循环(快递分拣中心)
- MFC 程序启动后,会运行一个“消息循环”(藏在
CWinApp
类里),像快递分拣中心一样,不断检查有没有新消息(比如鼠标点击、键盘输入)。 - 当有消息时,分拣中心会把消息“打包”(封装成
MSG
结构),然后投递给对应的“收件窗口”。
(2) 窗口过程(快递员派送)
- 每个窗口(比如按钮、对话框)都有一个“默认快递员”——窗口过程(
WindowProc
),负责接收消息。 - 在 MFC 中,这个快递员已经被框架封装好了(比如
CWnd
类),它会根据消息类型,决定是“自己处理”还是“转交给其他快递员”。
(3) 消息映射(收件人处理包裹)
- 关键点:MFC 用“消息映射表”(Message Map)把消息和对应的处理函数绑定。
- 比如:当收到“鼠标左键点击”消息(
WM_LBUTTONDOWN
),MFC 会查表找到你写的OnLButtonDown
函数来处理。 - 代码示例:
BEGIN_MESSAGE_MAP(MyWindow, CWnd)ON_WM_LBUTTONDOWN() // 绑定消息和函数 END_MESSAGE_MAP()void MyWindow::OnLButtonDown(UINT flags, CPoint point) {// 处理鼠标点击的逻辑,比如弹个对话框MessageBox(_T("你点击了鼠标!")); }
3. 为什么要用消息机制?
- 解耦:就像快递系统把“发件人”和“收件人”分开,消息机制让“事件触发”和“事件处理”解耦。
- 灵活性:你可以自由决定哪些消息需要处理(比如只关心按钮点击,不关心键盘输入)。
- 效率:系统不会因为某个窗口“忙”而卡死,消息会被排队处理。
4. 实际场景举例
假设你做了一个按钮,点击后关闭窗口:
- 用户点击按钮 → 触发
WM_LBUTTONDOWN
消息。 - MFC 的消息循环将消息分发给按钮对应的窗口。
- 按钮的窗口过程通过消息映射找到你写的
OnClick
函数。 - 你在
OnClick
中调用DestroyWindow()
关闭窗口。
5. 总结:MFC 消息机制的核心
- 消息循环:不断“收快递”。
- 窗口过程:默认的“快递分拣员”。
- 消息映射:告诉系统“哪个快递(消息)由谁签收(处理函数)”。
就像生活中的快递系统,MFC 的消息机制让程序能高效、有序地响应各种事件!🚚
相关文章:
通俗的理解MFC消息机制
1. 消息是什么? 想象你家的门铃响了(比如有人按门铃、敲门、或者有快递),这些都是“消息”。 在 MFC 中,消息就是系统或用户触发的各种事件,比如鼠标点击(WM_LBUTTONDOWN)、键盘输入…...

ClassLoader类加载机制的核心引擎
ClassLoader类加载机制的核心引擎 文章目录 ClassLoader类加载机制的核心引擎1. ClassLoader基础1.1 什么是ClassLoader?1.2 ClassLoader的层次结构1.3 类加载的过程 2. 源码解析与工作原理2.1 ClassLoader的核心方法2.2 双亲委派模型的工作原理2.3 打破双亲委派模型…...

tryhackme——Enumerating Active Directory
文章目录 一、凭据注入1.1 RUNAS1.2 SYSVOL1.3 IP和主机名 二、通过Microsoft Management Console枚举AD三、通过命令行net命令枚举四、通过powershell枚举 一、凭据注入 1.1 RUNAS 当获得AD凭证<用户名>:<密码>但无法登录域内机器时,runas.exe可帮助…...

【Linux学习笔记】系统文件IO之重定向原理分析
【Linux学习笔记】系统文件IO之重定向原理分析 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】系统文件IO之重定向原理分析前言一. 系统文件I/01.1 一种传递标志位的方法1.2 hello.c写文件:1.3 he…...
【新教程】Linux服务器ssh启用两步验证
1 背景 服务器被恶意破解的事件层出不穷,一旦被破解就比较麻烦。不如提前通过简单的措施——增加两步验证,来大大增强服务器的安全性。本教程在Debian 12.5、Ubuntu 24.04等系统上测试通过。 2 详细过程 1、安装 libpam-google-authenticator sudo a…...

SpringBoot中使用MCP和通义千问来处理和分析数据-连接本地数据库并生成实体类
文章目录 前言一、正文1.1 项目结构1.2 项目环境1.3 完整代码1.3.1 spring-mcp-demo的pom文件1.3.2 generate-code-server的pom文件1.3.3 ChatClientConfig1.3.4 FileTemplateConfig1.3.5 ServiceProviderConfig1.3.6 GenerateCodeController1.3.7 Columns1.3.8 Tables1.3.9 Fi…...

实现滑动选择器从离散型的数组中选择
1.使用原生的input 详细代码如下: <template><div class"slider-container"><!-- 滑动条 --><inputtype"range"v-model.number"sliderIndex":min"0":max"customValues.length - 1"step&qu…...

基于Credit的流量控制
流量控制(Flow Control),也叫流控,它是控制组件之间发送和接收信息的过程。在总线中,流控的基本单位称为flit。 在标准同步接口中(比如AXI协议接口),握手信号如果直接采用寄存器打拍的方式容易导致信号在不同的方向上出现偏离。因…...

【金仓数据库征文】金仓数据库KingbaseES: 技术优势与实践指南(包含安装)
目录 前言 引言 一 : 关于KingbaseES,他有那些优势呢? 核心特性 典型应用场景 政务信息化 金融核心系统: 能源通信行业: 企业级信息系统: 二: 下载安装KingbaseES 三:目录一览表: 四:常用SQL语句 创建表: 修改表结构…...
LLaVA:开源多模态大语言模型深度解析
一、基本介绍 1.1 项目背景与定位 LLaVA(Large Language and Vision Assistant)是由Haotian Liu等人开发的开源多模态大语言模型,旨在实现GPT-4级别的视觉-语言交互能力。该项目通过视觉指令微调技术,将预训练的视觉编码器与语言模型深度融合,在多个多模态基准测试中达到…...

金丝猴食品:智能中枢AI-COP构建全链路数智化运营体系
“金丝猴奶糖”,这个曾藏在无数人童年口袋里的甜蜜符号,如今正经历一场数智焕新。当传统糖果遇上数字浪潮,这家承载着几代人味蕾记忆的企业,选择以数智化协同运营平台为“新配方”,将童年味道酿成智慧管理的醇香——让…...
泛型设计模式实践
学海无涯,志当存远。燃心砺志,奋进不辍。 愿诸君得此鸡汤,如沐春风,事业有成。 若觉此言甚善,烦请赐赞一枚,共励学途,同铸辉煌! 为解决在设计框架或库时遇到的类型安全问题ÿ…...

java的输入输出模板(ACM模式)
文章目录 1、前置准备2、普通输入输出API①、输入API②、输出API 3、快速输入输出API①、BufferedReader②、BufferedWriter 案例题目描述代码 面试有时候要acm模式,刷惯leetcode可能会手生不会acm模式,该文直接通过几个题来熟悉java的输入输出模板&…...

鸿蒙 所有API缩略图鉴
从HarmonyOS NEXT Developer Preview1(API 11)版本开始,HarmonyOS SDK以 Kit 维度提供丰富、完备的开放能力,涵盖应用框架、应用服务、系统、媒体、AI、图形在内的六大领域,共计30000个API...
【LangChain全景指南】构建下一代AI应用的开发框架
目录 🌟 前言🏗️ 技术背景与价值🚧 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🔍 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🧩 关键技术模块说明⚖️ 技术选…...
垃圾对象回收
1.如何判断对象可以被回收 对象是否可以被回收通常由垃圾回收器决定。 垃圾回收器使用一种称为"可达性分析"的算法来确定对象是否可被回收。 可达性分析是指如果一个对象无法从任何GCRoots直接或间接访问到,它就被认为是不可达的,可以被垃圾回…...

【Docker系列】使用格式化输出与排序技巧
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
nvme Unable to change power state from D3cold to D0, device inaccessible
有个thinkpad l15 gen4笔记本,使用较少,有一块三星m2和东芝14t硬盘,想安装飞牛nas系统作为家庭照片库,制作飞牛启动盘,发现安装飞牛需要全盘格式化,电脑本身的系统还是需要保留的,故想到再安装一…...

基础语法(二)
Mysql基础语法(二) Mysql基础语法(二)主要介绍Mysql中稍微进阶一点的内容,会稍微有一些难度(博主个人认为)。学习完基础语法(一)和基础语法(二)之…...
AcWing 877:扩展欧几里得算法
【题目来源】 https://www.acwing.com/problem/content/879/ 【题目描述】 给定 n 对正整数 ai,bi,对于每对数,求出一组 xi,yi,使其满足 aixibiyigcd(ai,bi)。 【输入格式】 第一行包含整数 n。接下来 n 行,每行包含两个整数 ai…...
WebRTC流媒体传输协议RTP点到点传输协议介绍,WebRTC为什么使用RTP协议传输音视频流?
通过上一章《WebRTC工作原理详细介绍、WebRTC信令交互过程和WebRTC流媒体传输协议介绍》,我们知道WEBRTC在完成 SDP 协商和 ICE 候选交换信令后,双方就可以建立 RTP 流,开始传输音视频数据,这时,RTP 数据包就通过在 IC…...

TOA的定位,建模与解算的步骤、公式推导
TOA(到达时间)定位的核心是通过测量信号从目标到多个基站的传播时间,将其转换为距离信息,并利用几何关系解算目标位置。本文给出具体的建模与解算步骤及公式推导 文章目录 通用模型建立非线性方程组构建线性化处理(最小二乘法)最大似然估计(ML)高斯-牛顿迭代法误差分析…...
Python序列化的学习笔记
1. Npy&Numpy O4-mini-Cursor:如果.npy文件里包含了「Python对象」而非纯数值数组时,就必须在加载时加上allow_pickleTrue。...
[C++] 大数减/除法
目录 高精度博客 - 前两讲高精度减法高精度除法高精度系列函数完整版 高精度博客 - 前两讲 讲次名称链接高精加法[C] 高精度加法(作用 模板 例题)高精乘法[C] 高精度乘法 高精度减法 void subBIG(int x[], int y[], int z[]){z[0] max(x[0], y[0]);for(int i 1; i < …...

2025年PMP 学习七 -第5章 项目范围管理 (5.4,5.5,5.6 )
2025年PMP 学习七 -第5章 项目范围管理 5.4 创建 WBS 1.定义与作用 定义把项目可交付成果和项目工作分解成较小的,更易于管理的组件作用对所要交付的内容提供一个结构化的视图 2.输入,输出,工具与技术 3. 创建WBS的依据(输入&…...

CAD属性图框值与Excel联动(CAD块属性导出Excel、excel更新CAD块属性)——CAD c#二次开发
CAD插件实现块属性值与excel的互动,效果如下: 加载dll插件(CAD 命令行输入netload ,运行xx即可导出Excel,运行xx1即可根据excel更新dwg块属性值。) 部分代码如下 // 4. 开启事务更新CAD数据using (Transact…...

【HarmonyOS 5】鸿蒙中进度条的使用详解
【HarmonyOS 5】鸿蒙中进度条的使用详解 一、HarmonyOS中Progress进度条的类型 HarmonyOS的ArkUI框架为开发者提供了多种类型的进度条,每种类型都有其独特的样式,以满足不同的设计需求。以下是几种常见的进度条类型: 线性进度条(…...
Vue3响应式原理源码解析(通俗易懂版)
一、Vue3响应式核心流程 reactive(): 通过Proxy代理目标对象拦截get/set/deleteProperty等操作使用Reflect执行默认行为 依赖收集: get时通过track函数收集依赖(当前执行的effect)使用WeakMap建立"target -> key -> d…...
milvus+flask山寨复刻《从零构建向量数据库》第7章
常规练手,图片搜索山寨版。拜读罗云大佬著作,结果只有操作层的东西可以上上手。 书中是自己写的向量数据库,这边直接用python拼个现成的milvus向量数据库。 1. 创建一个向量数据库以及对应的相应数据表: # Milvus Setup Argume…...

Spring Cloud: Nacos
Nacos Nacos是阿里巴巴开源的一个服务发现,配置管理和服务管理平台。只要用于分布式系统中的微服务注册,发现和配置管理,nacos是一个注册中心的组件 官方仓库:https://nacos.io/ Nacos的下载 Releases alibaba/nacos 在官网中…...