windows消息机制

Windows的消息机制 Windows消息机制 Windows是一个消息驱动的操作系统。 什么是消息 消息是一种手段,可以帮助应用程序和操作系统、应用程序之间 进行通信。 操作系统可以发给应用程序一个消息,告诉应用程序某个特定的事件发生了。比如:当用户点击鼠标或键盘都会引发Windows发送相应的消息。应用程序也可以产生一个消息,使窗口执行特定的任务,或与其它应用程序通信。 从数据结构的角度来看,消息是一个结构体,包含了消息的类型标识符和其他附加信息。 typedef struct tagMSG { HWND hwnd; // 阅读详情

windows消息机制

一 Windows中有一个系统消息队列,对于每一个正在执行的Windows应用程序,系统为其建立一个“消息队列”,即应用程序队列,用来存放该程序可能 创建的各种窗口的消息。应用程序中含有一段称作“消息循环”的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。

o_windowsmessage2.jpg

二 Windows为当前执行的每个Windows程序维护一个「消息队列」。在发生输入事件之后,Windows将事件转换为一个「消息」并将消息放入程序的消息队列中。程序通过执行一块称之为「消息循环」的程序代码从消息队列中取出消息:
while(GetMessage (&msg, NULL, 0, 0))       
{        
    TranslateMessage (&msg) ;        
    DispatchMessage (&msg) ;       
}

msg变量是型态为MSG的结构,型态MSG在WINUSER.H中定义如下:
typedef struct tagMSG       
{       
    HWND   hwnd ;        
    UINT   message ;        
    WPARAM wParam ;        
    LPARAM lParam ;        
    DWORD  time ;        
    POINT  pt ;       
}       
MSG, * PMSG ;
      
POINT数据型态也是一个结构,它在WINDEF.H中定义如下:
typedef struct tagPOINT       
{       
    LONG  x ;       
    LONG  y ;       
}       
POINT, * PPOINT;
TranslateMessage(&msg); 将msg结构传给Windows,进行一些键盘转换。(关于这一点,我们将在第六章中深入讨论。)
DispatchMessage (&msg);又将msg结构回传给Windows。然后,Windows将该消息发送给适当的窗口消息处理程序,让它进行处理。这也就是说, Windows将呼叫窗口消息处理程序。在HELLOWIN中,这个窗口消息处理程序就是WndProc函数。处理完消息之后,WndProc传回到 Windows。此时,Windows还停留在DispatchMessage呼叫中。在结束DispatchMessage呼叫的处理之后, Windows回到HELLOWIN程序中,并且接着从下一个GetMessage呼叫开始消息循环。
        
三 队列化消息与非队列化消息
    
消 息能够被分为「队列化的」和「非队列化的」。队列化的消息是由Windows放入程序消息队列中的。在程序的消息循环中,重新传回并分配给窗口消息处理程 序。非队列化的消息在Windows呼叫窗口时直接送给窗口消息处理程序。也就是说,队列化的消息被「发送」给消息队列,而非队列化的消息则「发送」给窗 口消息处理程序。任何情况下,窗口消息处理程序都将获得窗口所有的消息--包括队列化的和非队列化的。窗口消息处理程序是窗口的「消息中心」。

队 列化消息基本上是使用者输入的结果,以击键(如WM_KEYDOWN和WM_KEYUP消息)、击键产生的字符(WM_CHAR)、鼠标移动 (WM_MOUSEMOVE)和鼠标按钮(WM_LBUTTONDOWN)的形式给出。队列化消息还包含时钟消息(WM_TIMER)、更新消息 (WM_PAINT)和退出消息(WM_QUIT)。

非队列化消息则是其它消息。在许多情况下,非队列化消息来自呼叫特定的Windows 函数。例如,当WinMain呼叫CreateWindow时,Windows将建立窗口并在处理中给窗口消息处理程序发送一个WM_CREATE消息。 当WinMain呼叫ShowWindow时,Windows将给窗口消息处理程序发送WM_SIZE和WM_SHOWWINDOW消息。当 WinMain呼叫UpdateWindow时,Windows将给窗口消息处理程序发送WM_PAINT消息。键盘或鼠标输入时发出的队列化消息信号, 也能在非队列化消息中出现。例如,用键盘或鼠标选择了一个菜单项时,键盘或鼠标消息就是队列化的,而说明菜单项已选中的WM_COMMAND消息则可能就 是非队列化的。

四 SendMessage()与PostMessage()之间的区别是什么?
它们两者是用于向应用程序发送消息的。PostMessagex()将消息直接加入到应用程序的消息队列中,不等程序返回就退出;而SendMessage()则刚好相反,应用程序处理完此消息后,它才返回。我想下图能够比较好的体现这两个函数的关系:

o_postmessage.gif


五 函数peekmessage和getmessage的区别?

两个函数主要有以下两个区别:
1.GetMessage将等到有合适的消息时才返回,而PeekMessage只是撇一下消息队列。
2.GetMessage会将消息从队列中删除,而PeekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中。 
Windows编程——消息机制 文章目录1. 消息机制1.1 得到消息1.2 发送消息2. 基本消息windows程序模块系统命令消息代码示例 1. 消息机制 windows操作系统最大的特色是良好的用户交互性,这种交互性通过优秀的图形界面来实现 Windows操作系统将用户对应用程序窗口的所有操作(键盘按键、鼠标点击、窗口最大最小化等等)转化为Windows消息并分发给应用程序,应用程序对这些消息进行响应,从而实现用户对操作系统以及应用程序的控制 这种产生消息、传递消息、处理消息的过程被称为Windows消息机制 。 Windows操作 阅读详情

相关推荐

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

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

weixin_42590539的博客 2029

创建自己的消息队列

(第一次写博客,往后会不断更新完善,请各位多多批评指教!!!) 消息队列顾名思义就是用来保存消息的队列。 队列具有先来后到的特点,即先进先出,后进后出,从而保证了消息执行的有序性。 消息队列只要包括消息和队列两个部分。因此先要定义消息的结构体,将消息的具体信息封装为一个整体,结构体中可考虑加入响应对象,根据具体的响应对象分发消息可提高效率。接下来就是创建队列,实现对队列的操作接口,比如初始化

weltion的专栏 843

进程间通信之消息队列

父进程创建消息队列和两个子进程p1和p2 子进程p1打开给定文件(如果没有,则创建文件),并向文件中写数据,写完关闭文件,然后向消息队列写入一条消息“ok”,目的是通知进程p2可以读取文件内容了。 子进程p2从消息队列读取消息,如果收到消息“ok”,则打开文件,读取文件内容,并将其输出道屏幕上,关闭文件。

消息队列(定义、结构、如何创建、消息队列的发送与接收、发送与接收实例)

一、定义 1、消息队列是一种先进先出的队列型数据结构,实际上是系统内核中的一个内部链表。消息被顺序插入队列中,其中发送进程将消息添加到队列末尾,接受进程从队列头读取消息。 2、多个进程可同时向一个消息队列发送消息,也可以同时从一个消息队列中接收消息。发送进程把消息发送到队列尾部,接受进程从消息队列头部读取消息,消息一旦被读出就从队列中删除。 二、结构 1、消息队列中消息本身由消息类型和消息数据组成,通常使用如下结构: struct msgbuf { long mtype; char mtext[

scarificed的博客 4万+

Windows NPS与华为、华三、思科设备RADIUS认证实战指南

本文详细介绍了Windows NPS与华为、华三、思科设备RADIUS认证的实战配置指南。通过NPS服务器统一管理网络设备认证,实现企业级安全访问控制,涵盖基础配置、设备对接及故障排查方法,助力管理员提升网络安全管理效率。

weixin_29284201的博客 505

基于Simulink的输入-输出线性化精确转矩控制

本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,通过建立PMSM非线性状态空间模型,设计IOL控制器将系统转化为线性输入-输出映射。文章包含系统原理推导、Simulink建模步骤、参数整定方法和仿真结果分析,验证了IOL在高动态、宽速域工况下的优越性能(转矩误差降低90%)。最后提出了工程实现要点和扩展应用方向,为开发高精度电机驱动系统提供了实用指导。

xiaoheshang_123的博客 304

进程的消息通信、消息队列

1.下面通过一个实验引入: #include <stdio.h> #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h> #define MSGKEY 75 struct msgform { long mtype; char mtext[1030]; }m...

记录学习点滴 1366

BUUCTF reverse题解汇总

BUUCTF平台刷题过程中做的一些逆向题解的总结归类

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1万+

windows消息的处理过程 消息队列

消息处理过程

单于的学习历程 817

别再乱设阻尼了!Abaqus动力分析中瑞利阻尼的α和β到底怎么算?

本文深入解析Abaqus动力分析中瑞利阻尼参数α和β的科学计算方法,帮助工程师准确设置阻尼参数以提升仿真精度。详细介绍了基于模态阻尼比的经典计算方法和多模态优化法,并结合工程案例演示参数设置流程,避免常见的阻尼设置误区。

weixin_42634811的博客 731

24届数字IC设计/验证秋招总结贴——先看这个

为方便快速进行查找该专栏的内容,将所有内容链接均放在此篇博客中整理不易,欢迎订阅~~

qq_42135020的博客 8413

PTAWindows消息队列c++版——山东科技大学

题目: 消息队列是Windows系统的基础。对于每个进程,系统维护一个消息队列。如果在进程中有特定事件发生,如点击鼠标、文字改变等,系统将把这个消息加到队列当中。同时,如果队列不是空的,这一进程循环地从队列中按照优先级获取消息。请注意优先级值低意味着优先级高。请编辑程序模拟消息队列,将消息加到队列中以及从队列中获取消息。 输入格式: 输入首先给出正整数N(≤1e5),随后N行,每行给出一个指令——GET或PUT,分别表示从队列中取出消息或将消息添加到队列中。如果指令是PUT,后面就有一个消息名称、以及一个正

scorpion_legend的博客 1167

QT里获取UUID当做唯一文件名称

QT里获取UUID当做唯一文件名称

542

windows的消息机制总结

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

Jacoob1024的博客 7848

AI自动化时代:一人公司的崛起与商业机会

AI技术正在重塑商业格局,催生"一人公司"创业新模式。这种轻资产、高效率的商业模式通过AI自动化运营,让个人创业者能以极低成本挑战传统企业。核心机会包括:1)AI自主公司替代人力密集型业务;2)为企业提供AI转型解决方案;3)利用AI工具实现个人创业。创业者需快速验证创意,聚焦人机协作,把握当前AI发展窗口期。未来,AI赋能的"一人公司"将成为商业新常态,带来更高的专业化和灵活性。抓住AI红利,学会人机协作,是个人创业成功的关键。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 518

基于 OpenCVSharp 的晶圆缺口自动检测与旋正方案

在半导体制造过程中,晶圆(Wafer)需要精确定位才能进行后续加工。每个晶圆边缘都有一个特定的缺口,这个缺口就像 "箭头" 一样,帮助机器确定晶圆的方向。我们的任务就是通过摄像头拍摄的图片,自动找到这个缺口的位置,计算出需要旋转多少角度才能让晶圆对准正确方向。简单来说,这个技术就像给晶圆 "找方向",确保它在生产线上始终保持正确的姿态。

品质生活,极致编程。 1211

windows消息机制详解

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

hongduilanjun的博客 5567

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Windows消息机制

1.Windows 的历史 中国人喜欢以史为鉴,而事实也确实是,如果你能知道一件事情的来龙去脉,往往可以更容易地理解事物为什么会表现为当前这样的现状。所以,我的介绍性开场白通常会以一段历史开始。不过,我不会以精确到年月日的那种方式详细讲述,而是选取几个对我们的编程生涯有重要影响的关键点。 Windows 是真正的图形化界面操作系统的普及者,无论任何人,争夺什么第一个实现的GUI、第一个商业化的GUI之类的虚名,都替代不了 Windows 的历史功绩,让最普通的用户能够容易地操纵PC。 第一个声名大噪.

顺其自然~专栏 1142

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

windows消息机制详解-3

1. 引言 Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛。 Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos 程序员不能 习惯Windows 的程序开发。而很多Windows 程序开发人员也只是对消息运行机制一知半解, 想要掌握Windows 编程的核心,必须深刻理解消息机制。事件驱动围绕着消息的产生与处 理展开,事件驱动是靠消息循环机制来实现的。也可以理解为消息是一种报告有关事件发生 的通知,消息是Windows 操作

u011555996的博客 3490

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Windows的消息机制和通信机制

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

远方雪的专栏 2005

深入理解Windows消息机制

今天我们来学一学Windows消息机制,我们知道在传统的C语言程序中,当我们需要打开一个文件时,我们可以调用fopen()函数,这个函数最后又会调用操作系统提供的函数以此来打开文件。而在Windows编程中,不仅用户可以调用系统的API函数,反之,系统也可以调用应用程序,而这些调用就是通过Windows的消息机制来实现的。Windows程序设计是一种完全不同于传统的DOS方式的程序设计方法,它是一...

qq_33263769的博客 930

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

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

lzzw的学习之路 1103

一文了解 Windows 消息机制的完整流程

Windows 消息机制通过。

不经一番寒彻骨,怎得梅花扑鼻香。 1560
上一篇: windows核心编程--线程高级
下一篇: Java对象序列化
strollerV
博客等级 码龄20年 13粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值