一直在想一句完成的方法,看来是没有了。刚才吃饭的路上也突然想到了,各种包含关系的控件的坐标系统的唯一交流点,就是屏幕坐标。做什么事情,都得先转成屏幕坐标,然后再转到目标系统。因此那个通用函数应该这么写Point transform(源控件,源控件坐标系的坐标,目标控件) obj.PointToScreen的参数,没有文章去强调这个参数必须是obj坐标系统里的点坐标。obj.PointToScreen(p),好像不如 PointToScreen(obj,p)好理解,我这是怎么了。我突然又明白了, PointToScreen本就不应该是某个控件的方法,因为他返回的是跟这个控件没有任何关系的东西。 请问我这么想正确吗?PointToScreen 应该放到一个类似叫Transform的类里作为static函数存在!! 不是我的错,是 类库设计的错。哈哈。 public Point PointToParent(Point value, Control parent)这种形式的函数, 正是让我迷惑了好几个小时的东西。
public static Point Transform(Control srcCtrl, Point pointOfSrcCtrl, Control destCtrl) { // 把控件1坐标系中的点坐标转为屏幕坐标系的点坐标 Point p1 = srcCtrl.PointToScreen(pointOfSrcCtrl); // 把屏幕坐标系的点坐标转控件2坐标系中的点坐标 Point p2 = destCtrl.PointToClient(p1); return p2; }
obj.PointToScreen的参数,没有文章去强调这个参数必须是obj坐标系统里的点坐标。obj.PointToScreen(p),好像不如 PointToScreen(obj,p)好理解,我这是怎么了。我突然又明白了,
PointToScreen本就不应该是某个控件的方法,因为他返回的是跟这个控件没有任何关系的东西。
请问我这么想正确吗?PointToScreen 应该放到一个类似叫Transform的类里作为static函数存在!!
不是我的错,是 类库设计的错。哈哈。
public Point PointToParent(Point value, Control parent)这种形式的函数,
正是让我迷惑了好几个小时的东西。
{
// 把控件1坐标系中的点坐标转为屏幕坐标系的点坐标
Point p1 = srcCtrl.PointToScreen(pointOfSrcCtrl); // 把屏幕坐标系的点坐标转控件2坐标系中的点坐标
Point p2 = destCtrl.PointToClient(p1); return p2;
}