| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 614 人关注过本帖
标题:系统是如何知道某个消息是发往特定窗口的(习惯了再汇编 收下这个问题吧)
只看楼主 加入收藏
wobianlong
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-8-1
结帖率:92.86%
收藏
 问题点数:0 回复次数:9 
系统是如何知道某个消息是发往特定窗口的(习惯了再汇编 收下这个问题吧)
系统是如何知道某个消息是发往特定窗口的
假设 我在桌面上开了很多个窗口
我的鼠标在移来移去
当我 鼠标点击某个窗口时候,这个窗口发生了反应
我的问题来了,系统是如何知道我鼠标点击了哪个窗口,不要说 消息里包含了哪个窗口的句柄 这样的话,所以才知道点击了哪个
系统是怎么识别 我的鼠标点击了哪里,然后封装一个消息给我点击的窗口,我点击了A窗口,为什么系统不会封装个给C窗口的消息呢,
搜索更多相关主题的帖子: 如何 桌面 
2012-10-07 21:54
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
http://msdn.

举个例子

LRESULT WINAPI SendMessage(
  _In_  HWND hWnd,
  _In_  UINT Msg,
  _In_  WPARAM wParam,
  _In_  LPARAM lParam
);

这个API第一个参数不就是个窗口的句柄么 每条消息自然也是有目的的

至于你说的那个 消息分很多种 比如 键盘的输入只会发给激活的也就是前台的那个 后台的那些就不会有 但鼠标消息是到哪里就发哪里罢 总之 肯定可以识别 具体实现细节 windows核心编程 里面讲过一点
2012-10-08 09:43
wobianlong
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-8-1
收藏
得分:0 
回复 2楼 zklhp
嗯 我想问的就是 系统是如何知道 我点了哪个窗口的?根据像素点吗?好像不是的,
假设A窗口重叠在C窗口上,我点了A,为什么系统就知道是我点了A 而不是C,
系统是究竟如何知道 我的鼠标点击 要发往哪个窗口

我听到有人问为什么,就用光一样的速度从大爆炸时代赶来了,遍布于世界各地的危险
2012-10-08 10:59
wobianlong
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-8-1
收藏
得分:0 
LRESULT WINAPI SendMessage(
  _In_  HWND hWnd,
  _In_  UINT Msg,
  _In_  WPARAM wParam,
  _In_  LPARAM lParam
);
我指的问题应该是 这个句柄是怎么确定的,应该是发生在这个消息前的事件  是如何确定

我听到有人问为什么,就用光一样的速度从大爆炸时代赶来了,遍布于世界各地的危险
2012-10-08 11:00
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
所有的窗口都是由Windows系统内部进行管理,它当然知道何时发送给哪个windows什么消息,从某个API函数例如:WindowFromPoint
从某个点获得该点所指的windows句柄,可以得知这个推断是正确的,windows内部创建了多少个窗口,每个窗口的坐标等参数,每个窗口对应了哪个消息处理函数,
都是由系统进行管理和维护,包括何时消毁,何时把它的Z坐标进行改变。

再来看这个API内部的运行机制,估计就是:进行遍历窗口,找到某个窗口的坐标范围是否在这个点中,如果没有找到,返回NULL,如果找到了,
继续查找该窗口中各个子控件的坐标是否在这个点的范围内,如果没有找到,就返回窗口的HWND,如果找到了,就返回子控件的HWND。
因为子控件也是窗口,当然,这只是估计,windows并不开发内核代码,所以我们只能猜测,如果系统是你写的,估计你也会采用这种方案。

因此,你点了窗口A,Windows并不会误认为你的鼠标跑到窗口B上了,不要忘了鼠标也是由windows系统通过驱动文件进行管理的,所以它会向你的窗口A消息过程发送消息,而不会发给B,换句话说,在发送消息前,Windows早就知道此消息应该发给谁了。
2012-10-08 11:46
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
莫非是传说中的“别呼叫我,我会呼叫您”?
撸过 雪袭。。。

梅尚程荀
马谭杨奚







                                                       
2012-10-08 11:51
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用wobianlong在2012-10-8 10:59:12的发言:

嗯 我想问的就是 系统是如何知道 我点了哪个窗口的?根据像素点吗?好像不是的,
假设A窗口重叠在C窗口上,我点了A,为什么系统就知道是我点了A 而不是C,
系统是究竟如何知道 我的鼠标点击 要发往哪个窗口
根据像素点吗?好像不是的

有的时候好像就是根据像素点在某个窗口内判断的。。
2012-10-08 12:00
wobianlong
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-8-1
收藏
得分:0 
回复 7楼 zklhp
难道你也不清楚这个问题吗?求探讨啊

我听到有人问为什么,就用光一样的速度从大爆炸时代赶来了,遍布于世界各地的危险
2012-10-08 14:29
wobianlong
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2012-8-1
收藏
得分:0 
回复 5楼 newdos
你的回答真对我的问题,好像系统要找个这个窗口还挺复杂啊
能说的再详细点嘛?
如果是键盘为什么先要激活该窗口

我听到有人问为什么,就用光一样的速度从大爆炸时代赶来了,遍布于世界各地的危险
2012-10-08 14:36
爱末流
Rank: 2
等 级:论坛游民
帖 子:101
专家分:16
注 册:2011-6-3
收藏
得分:0 
罗云彬的书不是有讲? 第四章
2012-10-09 17:53
快速回复:系统是如何知道某个消息是发往特定窗口的(习惯了再汇编 收下这个问题 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018205 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved