Esempio n. 1
0
        /// <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;
            }
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
 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));
 }