Windows运行机理——消息与消息队列
Windows运行机理这系列文章都是来至于《零基础学Qt4编程》——吴迪,个人觉得写得很好,所以进行了搬运和个人加工
Windows程序设计时一种基于消息的时机驱动方式的设计模式,完全不同于传动的DOS方式的程序设计方法,在Windows中,编程的框架都是响应和发送消息。例如,当用户在窗口中画图的时候,按下鼠标左键,此时操作系统会感知这一事件,于是将这个事件包装成一个消息,投递到应用程序的消息队列中,然后应用程序从消息队列中取出消息并响应,在这处理过程中,操作系统也给应用系统发送消息,所谓的“发送消息”,实际上是操作系统调用程序中一个专门处理消息的函数,称为窗口过程。
1. 消息
在windows 程序中,消息是由MSG 结构体来表示的。MSG 结构体的定义如下:
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG;
该结构体中各成员变量的含义如下:
hwnd 表示消息所属的窗口。我们开发的程序都是窗口应用程序,消息一般都是与某个
窗口相关联的。在Windows 程序中,用HWND 类型的变量来标识窗口。
message 变量指定了消息的标识符。在Windows 中,消息是由一个数值来表示的,不同
的消息对应不同的数值。但是由于数值不便于记忆,所以Windows 将消息对应的数值定义
为WM_XXX 宏(WM 是Window Message 的缩写)的形式,XXX 对应某种消息的英文拼写的大
写形式。例如,鼠标左键按下的消息是WM_LBUTTONDOWN,键盘按下消息是WM_KEYDOWN,字
符消息是WM_CHAR 等等。在程序中,我们通常都是用WM_XXX 宏的形式来使用消息的。
此外,我们可以定义自己的消息,并给窗口发送这些消息,您完全不用担心如何使这
些消息与代码联系起来,因为这是应用程序框架的事情。但是另一方面,这也在一定程度上
固定了程序设计上的一些结构。
wParam 和lParam 用于指定消息的其他附加信息。比如,当我们收到一个字符消息的时
候,message 成员变量的值就是WM_CHAR,但用户输入的是那些字符,就由wParam 和
lParam 来说明。wParam、lParam 表示的信息随消息的不同而有变化。
time 和pt 分别表示消息投递到消息队列的时间和鼠标的当前位置。
2. 消息队列
每一个Windows 应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消
息队列用来存放该程序创建的窗口的消息。Windows 将产生的消息依次放入消息队列中,而
应用程序则通过消息循环不断从队列中取出消息,进行响应。这种消息机制,就是Windows
程序运行的基本机制。
Windows运行机理——消息与消息队列的更多相关文章
- Windows运行机理——窗口句柄和消息
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 现在我们将消息与句柄联系起来.假如有一个窗口,且拥有该窗口的一个句柄( ...
- Windows运行机理——创建窗口
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字 ...
- Windows运行机理——主程序—WinMain
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 在windows 操作系统下,用C 或者C++来编写MS-DOS 应用 ...
- Windows运行机理——窗口和句柄
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 1. 窗口 窗口是Windows应用程序中一个非常重要的元素,一个Wi ...
- Windows运行机理——API与SDK
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以搬运加以整理. 首先 API:Application Programmaing Interf ...
- 【转】windows消息和消息队列详解
转载出处:http://blog.csdn.net/bichenggui/article/details/4677494 windows消息和消息队列 与基于MS - DOS的应用程序不同,Wind ...
- windows消息和消息队列
windows消息和消息队列 转自:http://blog.163.com/zhangjie_0303/blog/static/990827062010113062446767/ 与基于MS - DO ...
- Windows中的消息与消息队列
消息 在Windows中,消自由MSG结构体表示 typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lPar ...
- [8]windows内核情景分析--窗口消息
消息与钩子 众所周知,Windows系统是消息驱动的,现在我们就来看Windows的消息机制. 早期的Windows的窗口图形机制是在用户空间实现的,后来为了提高图形处理效率,将这部分移入内核空间,在 ...
随机推荐
- 简单使用Spring Boot+JpaRepository+hibernate搭建项目
sql: -- -------------------------------------------------------- -- 主机: 127.0.0.1 -- 服务器版本: 10.3.9-M ...
- HDU 1019 (多个数的最小公倍数)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1019 Least Common Multiple Time Limit: 2000/1000 MS (J ...
- VS2017无法打开Razor视图文件
VS2017一直卡顿就在扩展和更新里把没用的插件关闭了.导致后来一直NETCORE的Razor视图文件打不开 查了资料才知道需要依赖 ASP.NET Core Razor Language Servi ...
- BufPay.com 个人收款接口 接入步骤
作为独立开发者产品需要收款是非常麻烦的,注册公司维护成本太高,市面上各种收款工具要么手续费太高,要么到账很慢,体验很不好. 看到 「BufPay.com 个人收款」 这个收款工具,挺有意思的.原理是监 ...
- 什么是 better-scroll(转自知乎网 : 黄轶)
什么是 better-scroll better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写,它和 iscroll 的主要区别在这里.better-scroll 也很强 ...
- 最优贸易(tarjan,spfa)
题目描述 C国有n个大城市和m 条道路,每条道路连接这 n个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道 ...
- 安装mysql zip 安装包 Navicat连接
笔者在安装mysql时一直出现各种问题,今天难得成功一次,决定记录一下,留作纪念与参考 安装第一步,下载mysql https://dev.mysql.com/downloads/mysql/ 以在w ...
- MySQL数据库安装配置步骤详解
MYSQL的安装 1.打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认)”.“Comple ...
- node的安装和配置
一 . 直接安装node 1. http://nodejs.cn/download/ 根据自己的电脑选择适合的安装包 2.安装 , 无脑下一步 , 可以选择安装路径 , 但是一定要记住 . 3.命令行 ...
- jquery仿移动端支付宝键盘
最近做项目时碰到一个需求,就是在移动端支付页面点击支付按钮弹出一个支付键盘,类似于支付宝的那种.由于项目只是单纯的手机网站,而并非app,所以这个功能得由前端来实现.话不多说,先上图看看效果. 尼玛, ...