这个消息是谁的?

      当很多应用程序同时运行在Windows上时,这些程序共享Windows的一切资源,包括键盘,那么当发出一个键盘消息时,这个消息时给哪个程序的呢?如果该程序有多个窗口,这个消息又是哪个窗口的呢?

 

      当发出一个消息到消息队列时,这个消息本省携带的信息就明确地指出了自己是针对哪个窗口的,这个标识就是MSG结构中的hwnd变量,所以发出一个消息,该消息对应一个窗口,该窗口对应一个窗口过程,这样就可以明确的指出消息该被哪个窗口过程处理,窗口过程根据消息本省的message、lParam、wParam变量携带的信息就可以决定对该消息如何相应,这样消息传递问题就很好的解决了,不会产生歧义。

 

有输入焦点的窗口:接收到键盘事件的窗口。

活动窗口:最上层的窗口,也就是说,活动窗口的父窗口句柄是NULL。如果一个活动窗口有标题栏,则Windows会加亮显示其标题栏。

2者关系:具有输入焦点的窗口要么就是活动窗口,要么就是活动窗口的子孙窗口。

 

       当所有程序窗口都最小化时,就没有窗口具有输入焦点(活动窗口依然存在)。但是Windows仍然发送键盘消息给活动窗口,只不过此时的消息形式不同于活动窗口没有最小化时发送的键盘消息。

 

       窗口过程通过捕获WM_SETFOCUS和WM_KILLFOCUS消息来确定自己的窗口是否具有输入焦点。WM_SETFOCUS表明窗口正在接受输入焦点,WM_KILLFOCUS表明窗口正在失去输入焦点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值