首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

vc中怎么快速判断鼠标在哪个区域内

2013-01-06 
vc中如何快速判断鼠标在哪个区域内?.现在总共有1000个区域RECT rcs[1000]问题是怎么在窗口的MouseMove事

vc中如何快速判断鼠标在哪个区域内?
.现在总共有1000个区域
RECT rcs[1000];

问题是怎么在窗口的MouseMove事件中查询鼠标在其中的哪一个区域.一个就够了.

现在做法是:
POINT pt = {x,y};

for(int i = 0; i < 1000; i++)
{
     if(PtInRect(&rcs[i],pt))
          break;                //找到了.


问题是.我的目标只有一个区域.而这样找的话那么999次循环都是白费了..岂不是很浪费时间...应该怎么快速去处理呢?,应该用怎么样的算法呢?
[解决办法]
像比较传统的算法,如概率算法,二分法等可以加快查找的速度,楼主可以查找相关资料试下。
[解决办法]
如果是矩形区域二分法是很容查找,不规则区域似乎不好解决。

不知操作系统本身是如何处理鼠标区域查找的。
[解决办法]
才999循环,真的就是一瞬间,另外你太倒霉了,每次都是最后一次找到么?

好吧,可以根据位置坐标,大致把区域划分一下,分成4块或者,8块。

这样只要最多循环 8+1000/8或者 4+ 1000/4
[解决办法]
RECT rcs[1000];对右上角的坐标按X值或者Y值进行排序

然后获取当前鼠标的(x,y)值,二分法在比较(当前x<=左上角x)当前坐标在那个区域


[解决办法]

引用:
RECT rcs[1000];对右上角的坐标按X值或者Y值进行排序

然后获取当前鼠标的(x,y)值,二分法在比较(当前x<=左上角x)当前坐标在那个区域


最好是每个窗口左上角的(x,y)点 ,按照x值或者Y值排序  

热点排行