如何判断当前鼠标位置 (50分)

  • 主题发起人 主题发起人 wyb_506
  • 开始时间 开始时间
W

wyb_506

Unregistered / Unconfirmed
GUEST, unregistred user!
如果在绘图区画了很多图线,也包括多边形,怎么判断当前鼠标在哪个图形上呢?
 
我顶先。这个问题关注!!
 
先判断鼠标在窗口的位置
再去判断坐标位于那个图形
 
我问的就是你说的第二点,怎么判断呢?
 
我举个简单的例子说明这个问题的解决方案:
某直线:(x1,y1)-(x2,y2)
现在鼠标在窗口的坐标位置为(x,y)点
首先计算鼠标坐标点(x,y)到直线(x1,y1)-(x2,y2)的垂直距离为d
不要问我不会算,找本中学代数/几何课本看一下就知道了
我们规定当一个点到一个测试目标(这里是直线)距离小于一定值dd是视为该点与测试目标发生碰撞。
不要将dd值设为0,这样会使用你的程序操作上很不灵敏,用户得用放大镜来找你的直接,如果你的GUI是像素模式的话,可以将dd 设为1-2。
基于以上原理可以处理直接、矩形、多边形等,
但不能处理圆、椭圆和曲线等图形,这种图形需要使用MS提供一组函数集用于实现这些测试:
CreateRoundRectRgn -- 创建一个圆角矩形区域
CreateEllipticRgn -- 创建一个椭圆区域
...
你可以在MS的API帮助中查找
 
这样是最优的办法吗?总觉得麻烦啊。。
 
这只是最最基本的,要考虑的事情还多得多.
 
to newater
本来就是这样, 不写最省事
 
算法很好了,关注这个问题
 
MS提供一个CRgn类封装,使用这个东西可以省事点,但这个API集对WinCE支持不好,像椭圆的区域函数在WinCE下就得不到支持,如果你的程序要在WinCE下运行,那么你需要再把中学代数/几何课本看一下,学习如何计算一个点到椭圆的最小距离公式,自己写代码。其实单从性能上看,这种方法也不错,使用Rgn API集占用内存比较大的,在我的一个工控软件的组态画面中都是自己计算的,不过代码是公司的东西,不好拿出来卖弄。

老兄也不过也不也太过分了[:(!],作程序员本来就是麻烦事,同意chshanghai的说法:不写最省事。作程序员的首先目标要程序运行正确、然后才去想最优算法,这是我从我的一个前辈那学的。运行正确,说明你的思路、算法可行了,然后再去研究优化,否则别人已经作出同样的软件弄去卖钱了,你还在研究算法,得不尝失……
 
qsoft.51.net老兄你好,其实针对直线的判断方法你说的可行,但是如果我的直线有很多条,或者我用画面平移功能,性能会打大折扣。
另外 多边形的判断呢?能否详解
 
GetCursorPos()函数用于获取鼠标指针的当前位置。(它的返回值是Boolean型的)
对你可能有用的[:)]
 
后退
顶部