1.2 理解Windows消息机制

Windows 命名管道通信 什么是命名管道? 命名管道是一种简单的进程间通信机制, 命名管道的命名规范 \\server\Pipe\[path]name 第一部分server,指定服务器名字 第二部分Pipe,硬编码即原样照录 第三部分 唯一命名+路径 例如 \myserver\Pipe\mypipe \Testserver\pipe\coldirectory\funtest\jim \.\Pipe\Easyname... 阅读详情
 

Windows系统是一个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。

1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。

2、谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。

3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正因为有了这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。

4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。

5、示例:下面有一段伪代码演示如何在窗口过程中处理消息

LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM)
{
	switch(uMessageType)
	{//使用SWITCH语句将各种消息分开
		case(WM_PAINT):
			doYourWindow(...);//在窗口需要重新绘制时进行输出
		break;
		case(WM_LBUTTONDOWN):
			doYourWork(...);//在鼠标左键被按下时进行处理
		break;
		default:
			callDefaultWndProc(...);//对于其它情况就让系统自己处理
		break;
	}
}

 

接下来谈谈什么是消息机制:系统将会维护一个或多个消息队列,所有产生的消息都回被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。下面的伪代码演示了消息循环的用法:

while(1)
{
	id=getMessage(...);
	if(id == quit)
		break;
	translateMessage(...);
}

当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。 下图为消息投递模式

 

在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。Windows3.X就是这种系统。

而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT就是这种系统。

 
Windows编程——消息机制 文章目录1. 消息机制1.1 得到消息1.2 发送消息2. 基本消息windows程序模块系统命令消息代码示例 1. 消息机制 windows操作系统最大的特色是良好的用户交互性,这种交互性通过优秀的图形界面来实现 Windows操作系统将用户对应用程序窗口的所有操作(键盘按键、鼠标点击、窗口最大最小化等等)转化为Windows消息并分发给应用程序,应用程序对这些消息进行响应,从而实现用户对操作系统以及应用程序的控制 这种产生消息、传递消息、处理消息的过程被称为Windows消息机制 。 Windows操作 阅读详情

相关推荐

全面掌握Windows消息机制:消息大全与编程实践

本文还有配套的精品资源,点击获取 简介:Windows消息机制是应用程序与操作系统间通信的基础,涉及各种消息类型,包括系统消息、输入消息、通知消息、绘图消息、定时器消息等。开发者需掌握消息处理技术,以实现高效的应用程序响应。"Windows消息大全及消息列表"资源详细列出所有消息及其在编程中的应用,有助于理解和应用消息机制,解决程序中的问题。学习步骤包括理解消息含义、查看处...

weixin_42590539的博客 2029

Windows消息机制初谈

Windows系统是一个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。 1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单转中之后会有WM_CO

xxsteven的专栏 1262

VC++中窗口过程函数及其消息发送、响应机制

该资源在VS2008SP1 IDE中编写, 主要介绍了VC++中窗口过程函数及其消息发送、响应机制,将对你学习VC++中的消息响应机制产生巨大帮助。资源中除了源代码,还包含了一个名为“程序说明.doc”的文档,该文档中详细介绍了VC++中如何使用窗口过程函数及其消息发送、响应的机制。

Visual C++模态对话框消息处理机制的分析

摘要:消息驱动机制是Windows操作系统的根本,模态对话框消息处理又是不同于一般消息处理的特殊形式。通过分析这种消息机制的原理,可用来处理类似的程序设计要求。  在Windows操作系统中,面向用户的GUI基本上可分为对话框形式和文档/视图两种表现形式。对话框的显示方式又可分为模态对话框和非模态对话框,以适应不同的用户交互需求。由于对话框和文档/视图框架结构各有特色,能不能将文档/视图框架结构当

无烟会议室的专栏 产品|编程|软件工程|管理|游戏|电子书 1725

Windows消息传递机制详解

对于windows程序设计,这里有几个关键词需要注意:消息,消息循环,窗口过程。   所谓的Windows消息传递机制就类似于生活中的物流公司。当寄件人(例如鼠标、键盘)将包裹(消息)交给物流公司(Windows系统)时,物流公司(Windows系统)会进行整理并且派发(整理及派发主要由消息循环完成),交给相应的快递员(窗口过程)来处理。快递员(窗口过程)拿到包裹(消息)后则有多种方式来处理,如立马交给收件人,等一天交给收件人,或转交给其他快递派发,这就需要在窗口过程中用swich/case来区分。   消息循环: 当初始化完成后,WinMain主函数就进入消息循环: While(GetM

VMware Converter 6.2.0保姆级教程:从物理机到ESXi主机的完整迁移指南(含常见错误排查)

本文提供VMware Converter 6.2.0从物理机迁移至ESXi主机的完整保姆级教程。详细解析了迁移前的环境规划、核心转换过程步骤、版本差异对比,并重点针对代理安装失败、任务卡顿、虚拟机无法启动等常见错误提供了实战排查与解决方案,确保P2V迁移顺利进行。

sam99的博客 380

【C/C++实现进程间通信 三】管道通信机制

本项目主要用于以管道通信的方式进行进程间通信的测试。 1.主要包含PublisherDemo和SubscriberDemo两个子项目,分别用于发送信息和接收信息。 2.在PublisherDemo中,程序创建一个命名管道,并连接到该管道。然后,使用WriteFile函数向管道写入消息。 3.在SubscriberDemo中,程序连接到同一个命名管道,并使用ReadFile函数从管道读取消息,并打印收到的消息。

wddkxg的博客 797

基于步科(Kinco HMI 2.5)的组态软件使用

本篇介绍Kinco HMI 2.5的组态软件使用,图标如下 目录   一、新建工程并配置连接 1.1 根据工程选择PLC与HMI型号 1.2 配置PLC连接与选项 二、组态画面编辑 2.1 打开画面窗口 2.2 编辑画面 2.3 组态变量与PLC程序变量连接 三、组态程序下载到HMI 3.1 连接 3.2 编译 3.3 下载 一、新建工程并配置连接 1.1 根据工...

ACanswer的专栏 1万+

C++基础学习之15 - 消息机制

提到进程间通信(IPC),你可能会想到很多种方式,比如: 1)消息传递(管道、FIFO、消息队列); 2)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量); 3)共享内存(匿名的和具名的); 4)远程过程调用(Solaris门和Sun RPC)。         没错,你有很多种选择,但提到消息,很多人第一印象就是 发送者(Sender)和 接收者(Receiver)。你

跟随技术的脚步-linolzhang的专栏 1588

555时基芯片的5种经典电路设计:从方波发生器到PWM调光实战

本文深入解析了555时基芯片的5种经典电路设计,从基础的无稳态方波发生器、单稳态触发器,到实用的占空比可调PWM信号源,并重点介绍了如何引入TVS保护电路增强系统鲁棒性。最后通过一个带保护的PWM LED调光台灯实战项目,综合展示了信号生成、功率驱动与电路保护的核心技术,是电子爱好者掌握模拟电路设计与应用的绝佳指南。

weixin_29207439的博客 491

Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略

本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。

nnn11的博客 740

Windows API一日一练(13)TranslateMessage函数

TranslateMessage是用来把虚拟键消息转换为字符消息。由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。 TranslateMessage函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用GetMessage函数时被取出。当我们敲击键盘上的某个字符键时,系统将产生WM_K...

anjichan4261的博客 369

STM32F103C8T6 + GY-906红外测温:手把手教你用CubeMX和HAL库搞定IIC驱动(附完整工程)

本文详细介绍了如何使用STM32F103C8T6和GY-906红外测温传感器(基于MLX90614芯片)实现非接触式温度测量。从STM32CubeMX工程创建、HAL库驱动适配到温度数据采集与处理,提供完整的开发流程和常见问题解决方案,帮助开发者快速掌握红外测温技术。

weixin_29188043的博客 254

1.2理解Windows消息机制

系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时系统就会得不到控制权。

qq_41237850的博客 405

从零到一:AVL Cruise与Matlab联合仿真DLL配置的避坑指南

本文详细介绍了AVL Cruise与Matlab联合仿真DLL配置的全流程,包括编译器选择、环境变量设置、DLL编译与模型导出等关键步骤。针对常见问题如版本匹配、路径错误等提供了实用解决方案,帮助工程师高效实现控制策略与整车性能仿真的无缝对接。

weixin_29054399的博客 567

用YOLO11-seg玩转裂缝分割:CBAM注意力魔改+轻量化GhostConv实战

本文详细解析了如何利用YOLO11-seg进行裂缝分割任务,结合CBAM注意力机制和GhostConv轻量化改造,显著提升模型性能。通过实战案例展示从数据准备、模型训练到部署优化的全流程,特别针对小目标检测和复杂背景干扰等挑战提供解决方案,最终实现高效准确的裂缝检测系统。

j0k1l2m3n的博客 287

[Visual C++系列] 1.2 理解Windows消息机制

1.2 理解Windows消息机制 Windows系统是一个消息驱动的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。 1、消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPAR

笨笨D幸福 - 后花园 711

Python实现稳态传热传质的偏微分方程求解

通过这种方法,我们可以求解更复杂的传热传质问题,并对系统的温度和浓度分布进行分析和优化。稳态传热传质是一个重要的工程问题,涉及到物质在空间中的分布以及热量和质量的传递。每次迭代中,我们使用上一次迭代的温度值来计算下一次迭代的温度值。该图显示了平板内部各点的温度分布,其中中心温度为T1,边界温度为T2。接下来,我们创建一个N x N的温度矩阵,并将边界条件初始化为边界温度T2。假设我们有一个矩形平板,其中心温度为T1,四个边界温度为T2。假设平板的长度为L,宽度为W,中心温度为T1,边界温度为T2。

HackDashX的博客 308

windows的消息机制总结

DOS靠过程来驱动,而windows靠消息驱动。 MFC/QT是一个广泛使用的变成类库,对windows的消息机制进行了很好的封装。 1、消息的概念: 消息是指windows操作系统发给应用程序的一个通告,告诉程序某个特定的事件发生了。比如用户点击鼠标,会引发相关的消息,并交给相应的程序去处理。最终处理消息的是应用程序的窗口函数,如果程序不负责处理的话,系统会作出默认的处理。 从数据结构的...

Jacoob1024的博客 7848

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

windows消息机制深入详解-1

Windows 是一个事件驱动的操作系统。事件驱动围绕着消息的产生与处 理展开,事件驱动是靠消息循环机制来实现的。也可以理解为消息是一种报告有关事件发生 的通知,消息是Windows 操作系统的灵魂。 在屏幕显示一个窗口一般是以下几个步骤: 1. 得到应用程序的句柄(GetMouduleHandle,一个程序被加载进内存之后,被称为一个模块,代表着这个文件中所有的代码和资源,取这个模块的句柄方便以后操作这个应用程序)。 2. 注册窗口类(RegisterClassEx),在注册之前,要先填写Regis

u011555996的博客 4790

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

真正理解微软Windows程序运行机制——什么是消息

真正理解微软Windows程序运行机制——什么是消息

荔园微风的博客 1623

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Windows系统消息机制的详细理解!

写在前面的话:     很多书在讲Windows消息机制的时候都讲的比较简单或者比较模糊。我花了2天时间,把微软官方的讲解理解了一下,写成下列的文章,希望可以帮助到一些需要帮助的人! 消息和消息队列概述    基于windows的应用程序是基于事件驱动的。他们不会显式地调用函数获得输入,而是等待操作系统把输入传给应用程序。操作系统把所有针对应用程序的输入都会传给应用程序内的每个窗口,每个窗口都有一个叫做窗口过程的函数,在任何时候只要窗口有输入,操作系统就会调用这个窗口过程函数。窗口过程函数处理完输入就会把控

softman11的专栏 1万+

windows消息机制详解

windows是一个消息驱动的系统,windows的消息提供了应用程序之间、应用程序与windows系统之间进行通信的手段。要想深入理解windows,消息机制的知识是必不可少的。

hongduilanjun的博客 5567

Windows消息机制的逆向分析(全面理解windows消息机制)

目录 一、 Windows消息机制流程 (1)消息 (2) Windows窗体的创建 (3).Windows消息的处理 二、一个简单实例 三、更深入一步分析 一、 Windows消息机制流程 (1)消息 消息系统对于一个Windows程序来说十分重要,它是一个程序运行的动力源泉。一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件。消息本身是作为一个...

lzzw的学习之路 1103

Windows的消息机制和通信机制

应用程序可以定义自定义消息,以实现特定功能。自定义消息通常使用WM_APP以上的值。Windows操作系统的核心机制涵盖了内核架构、进程和线程管理、内存和文件系统管理等多个方面。窗口消息和消息机制是Windows与应用程序交互的基础,而DLL框架和进程间通信则为应用程序提供了模块化和高效的通信手段。深入理解这些机制有助于开发高效、稳定和安全的Windows应用程序。

远方雪的专栏 2008
上一篇: 1.1 如何学好VC
下一篇: 1.3 利用Visual C++/MFC开发Windows程序的优势
zaowei21
博客等级 码龄25年 38粉丝 517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值