浅谈消息机制

       在C++和C#编程中经常会用到消息机制,以前一直处于似懂非懂的状态,最近找书籍资料仔细研究了一下消息机制,拿出来分享一下。个人理解能力有限,以下文字如有不正确或不准确的地方,欢迎大家指正。

       在编写窗体应用程序时,用户通过键盘输入或鼠标点击等事件将信息传递给系统,系统则将这些事件转换成消息再传递给窗口(窗口与窗口之间也可以通过“消息”进行通信),消息的命名通常带有WM前缀。在Windows环境下,系统会应用程序创建一个消息队列,然后将这些由用户输入产生的消息存放到该消息队列中。在应用程序中会有处理这些消息的循环函数,一旦从队列中检索到符合条件的消息,就会将这些消息发送到相应的窗口过程(WndProc函数)。一个应用程序可以包含多个窗口过程,即可包含多个WndProc函数。消息循环函数和WndProc函数不是并发运行的。当一个消息循环函数从消息队列中检索到消息,并调用消息发送函数(DispatchMessage函数)将消息发送给WndProc函数时,只有在WndProc释放权限时,DispatchMessage函数才会发出消息。

       WndProc函数主要在以下情形被调用:

       1)新建窗口时。

       2)窗口被销毁时。

       3)窗口尺寸发生变化或位置发生移动时。

       4)有鼠标事件发生时。

       5)有键盘事件发生时。

       6)窗口需要重绘时。

       

       消息分为队列消息和非队列消息。队列消息主要包括用户鼠标输入消息、键盘输入消息、定时器消息、重绘消息和退出消息。非队列消息通常由特定的函数引起。SendMessage和PostMessage函数的区别在于队列消息一般使用PostMessage函数,而非队列消息一般使用SendMessage函数。PostMessage可以响应键盘输入消息,而SendMessage不能对此作出响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值