【C++】应用程序及操作系统之间消息及消息队列的运行机制

消息是怎样产生的?以及消息如何在应用程序及操作系统之间传递的呢?

当我们在窗口之中绘图或者进行其他操作的时候,比如单击鼠标右键,此时操作系统就会感知到这个事件,并把这个事件封装成一个消息,投递到应用程序的消息队列当中,然后应用程序从消息队列中提取消息并作出响应。

那什么又是消息队列呢?其实在每一个 windows 应用程序运行之前,操作系统都会为之创建一个消息队列,用来存放该程序创建的窗口的消息。

在 windows 系统当中,消息是由 MSG 结构体来表示的,具体定义如下图。
这里写图片描述
第一个成员变量 hwnd 表示消息所属的窗口,我们开发的应用程序通常而言都是窗口应用程序,所以说消息一般都是和某个窗口相关联的。

第二个成员变量 message 指定了消息的标识符,在 windows 当中,消息是以一个数值表示的,不同的消息有不同的数值。这样可以说很不方便我们的记忆,所以 windows 就讲消息定义为 WM_XXX 宏的形式,比如键盘按下的消息为 WM_KEYDOWN,字符消息为 WM_CHAR 等等。

第三、四个成员变量 wParam 和 lParam,用来指定消息的附加信息。当我们收到一个字符消息的时候,message 的值为 WM_CHAR,但用户到底输入的什么字符,就得 wParam 和 lParam来进行说明。

最后两个变量分别表示消息投递到消息队列中的时间和鼠标的当前位置。

当然消息还分为“进队消息”和“不进队消息”,所谓队列消息就是,消息经操作系统到应用程序的消息队列中,然后经应用程序进行取出及发送;不进对消息就是系统在调用窗口时直接发送给窗口。但不管是进队消息还是不进队消息,都是由系统调用窗口过程函数对消息进行处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值