我举个简单的例子说明这个问题的解决方案:
某直线:(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帮助中查找