/// <summary> /// 根据点相对方框的方位设置控件中显示的鼠标形状. /// </summary> /// <param name="mp">控件</param> /// <param name="e">点的板坐标</param> private void SetCursor(Point e) { Direction dir = CurFocus?.MouseOverWhere(e) ?? Direction.outside; switch (dir) { case Direction.center: Cursor = Cursors.SizeAll; break; case Direction.top: case Direction.bottom: Cursor = Cursors.SizeNS; break; case Direction.topRight: case Direction.bottomLeft: Cursor = Cursors.SizeNESW; break; case Direction.topLeft: case Direction.bottomRight: Cursor = Cursors.SizeNWSE; break; case Direction.left: case Direction.right: Cursor = Cursors.SizeWE; break; default: Cursor = Cursors.Default; break; } }
/// <summary> /// 根据鼠标位置获取选中的Win /// </summary> /// <param name="de"></param> /// <returns></returns> public WinBase FindMouseOnRect(Point de) { if (SubWinList == null || SubWinList.Count == 0) { return(this); } WinBase centerRect = null; foreach (WinBase rct in SubWinList ?? new List <WinBase>()) { Direction dtemp = rct.MouseOverWhere(de); switch (dtemp) { case Direction.outside: break; case Direction.center: //如果没有边,反馈先找到的中心框。 if (centerRect == null || rct == CurFocus) { centerRect = rct; } break; default: return(rct); } } if (centerRect == null) { return(this); } WinBase win = centerRect.FindMouseOnRect(de); if (win != null) { return(win); } if (CurFocus != null) { Direction fdir = CurFocus.MouseOverWhere(de); Direction mdir = centerRect.MouseOverWhere(de); if (MoreFocus(mdir, fdir)) { return(centerRect); } else { if (CurFocus == TheBoard && mdir > Direction.outside) { return(centerRect); } else { return(CurFocus); } } } return(centerRect); }
private void MarkedPicture_MouseDown(object sender, MouseEventArgs e) { ChangeFocus.CreateInstance()?.Hide(); SetDownDelt(e.Location); if (e.Button == MouseButtons.Left) { mouseDownPosition = e.Location; //记录每次点击时鼠标按下的位置 MouseLeftDown = true; } else if (e.Button == MouseButtons.Right) { if (CurFocus != null && CurFocus != TheBoard) { Point de = ShowToPos(e.Location); Direction dir = CurFocus.MouseOverWhere(de); if (dir > Direction.outside) { Point p = e.Location; ChangeFocus cf = ChangeFocus.CreateInstance(); p.Offset(getRealLocation(this, theMainForm)); cf.Location = p; if (cf.Bottom > Screen.PrimaryScreen.Bounds.Height) { p.Offset(0, -cf.Height); cf.Location = p; } cf.Show(); } } } TheBoard?.OnMouseDown(sender, e);//ShowToPos(e.Location)); }