这个消息是谁的?

来源:互联网 发布:php 混淆加密 编辑:程序博客网 时间:2024/06/12 01:07

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

 

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

 

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

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

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

 

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

 

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

原创粉丝点击