Windows消息机制

消息送到正确的线程消息队列

大家都知道在键盘输入或点击鼠标时,Windows会将这些消息事件送入系统消息队列,再由系统消息队列送入相应程序的线程队列,那么Windows是如何知道这些鼠标或键盘输入是在哪个窗口发生,又是如何将消息送入正确的线程队列的呢?

当用户键盘输入时,系统会找到当前的激活窗体;而根据用户点击鼠标的坐标,系统也可以找到是在哪个窗体区域内点击了鼠标,从而拿到窗体句柄。操作系统在创建进程和线程时,都同时记录了大量的控制信息(比如通过进程控制块和句柄表可以查到进程所创建的所有线程和引用的核心对象),因此,根据窗体句柄来确定此消息属于哪个UI线程对于操作系统来说是很简单的一件事。操作系统有一个专门的线程负责从系统消息队列中取出消息,根据消息的窗体句柄找到创建它的线程,把消息移动到该线程的消息队列中。


模态窗口的消息循环

当调用ShowModal时,会Repeat调用HandleMessage,接替Application.Run里的HandleMessage工作,这时,整个程序的消息循环就由模态窗口来处理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值