Windows消息关于谁调用的谁

看了好久但是还是不敢说自己弄得很明白了,不过以下大神的话是目前我觉得最清晰有理的,先记下来

其实问题的关键在于DispatchMessage到底干了什么
如果只是去调用相应的窗口,那自己写个switch不就可以了
DispatchMessage与switch不同之处在于DispatchMessage会
先调用windows,进入管态(大概是range 0),然后再由windows调用
窗口的函数。
为什么这么麻烦?
因为这样windows就可以知道你的程序运行到什么情况了,
windows来调用你的窗口,这样你的窗口返回的时候windows就知道
你已经处理过一个消息了,如果没有新的消息进入消息队列
windows就不再会给你的进程分配时间片
如果是你自己写switch的话,windows就不可能这样灵活的分配时间
资源利用率就会降低
那么还要消息循环干什么,windows直接把消息发给窗口不就可以了吗?
因为你要在消息循环里把KEY_DOWN和KEY_UP组合成WM_CHAR,
还可以直接屏蔽掉许多对你来说无用的消息,加快速度

DispatchMessage这一套机制大概是windows里最难理解的部分了(除了COM以外)




又看了看windows程序设计,补充一下,整个消息机制过程应该是这样的

1:我的窗口程序创建一个MSG

2: 当我点击了鼠标或键盘,该操作被windows系统捕捉到,系统把这一操作变成MSG放到它为我的程序所自动创建的消息队列里

3:我通过GeMessage或者PeekMessage取出这条消息,将消息内容放到我创建的MSG里面

4:我的程序调用函数TranslateMessage(&MSG),将我存储的消息地址发给系统,系统来转换键盘信息也就是系统帮我把MSG里存的内容变成我能处理的键盘信息,现在MSG里存的就是具体的操作信息了,比如按下的是空格还是回车

5:我的程序再调用函数DispatchMessage(&MSG),再将这个翻译过的消息发送个系统,由系统来调用我的WndProc函数,至于为什么上面的大神说过了

先这样理解吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值