|
问题:
鼠标在桌面移动的过程中,系统怎么快捷的判断鼠标当前落在那个窗口上?
实现办法一:
从顶层到下层窗口寻找,判断方法是:鼠标的X值是否在窗口的X1和X2之间.
并且鼠标的Y值是否在窗口的Y1,Y2之间.如果都是则鼠标在这个窗口内.
例如我们使用的窗口起始点是 300,200,终点 500x350.
鼠标是x,y
判断
if (300<x<500 && 200<y<350)
真
else
下一个窗口.
这样挨个窗口轮询.
此方法或许有些慢.
实现方法2:
在内存中存放同桌面分辨率等大小的像素对应窗口ID的映射表.
拿1024x768为例:
char map[1024*768];
对应的窗口像素位置填充好窗口的ID.这样通过ID关系查找到窗口.
例如我们使用的窗口起始点是 300,200,终点 500x350.窗口id = 15;
就要将同样大小的矩形区域填上15.
窗口在底下的最先填写,窗口在上面的最后填写.
此方法速度快但是消耗内存大.
实现方法3:
用1024x768为例:
每个窗口存放char width[1024],height[768].初始化为0.
例如我们使用的窗口起始点是 300,200,终点 500x350.
那么 将width[1024] 从300----500填充为1,其他为0,不变.
将height[768] 从 200---350填充为1,其他不变.
查找时从顶到下轮询窗口看width[x] &&height[y],同时成立.
挨个轮询.
此方法需要消耗部分内存,但速度很快.EGui使用了此方法. |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|