Exemple #1
0
        /// <summary>
        /// 处理分组内所有按钮的鼠标按下事件
        /// </summary>
        /// <param name="backBufferBitmap">当前双缓冲绘图缓存的背景图片</param>
        /// <param name="offsetPoint">偏移点,用于消除窗口最大化时窗口边框厚度对点计算造成的误差</param>
        /// <param name="p">鼠标位置</param>
        /// <returns>若本组内有按钮命中移过测试,且状态被改变,则返回true,否则返回false.</returns>
        public void OnMouseDown(Image backBufferBitmap, Point offsetPoint, Point p)
        {
            ////当Button有重叠的时候,从最上层的Button开始遍历
            //for (int i = this._buttonList.Count - 1; i >= 0; i--)
            //{
            //    Button button = this._buttonList[i];
            //    if (button.Visible == true
            //        && button.Status != ButtonStatus.Down
            //        && button.RectangleContains(backBufferBitmap, offsetPoint, p))
            //    {
            //        //ResetAllButtonStatus(ButtonStatus.Normal);
            //        button.Status = ButtonStatus.Down;

            //        //当有一个按钮获得鼠标按下焦点时,立即返回true,那么其他分组将不再做按下焦点处理
            //        //任何时候只有一个按钮能获得按下焦点
            //        return true;
            //    }
            //}
            //return false;

            for (int i = this._buttonList.Count - 1; i >= 0; i--)
            {
                DUIButton button = this._buttonList[i];
                if (button.Visible == true &&
                    button.Status != ButtonStatus.Down &&
                    button.RectangleContains(backBufferBitmap, offsetPoint, p))
                {
                    //ResetAllButtonStatus(ButtonStatus.Normal);
                    button.Status = ButtonStatus.Down;
                }
            }
        }
Exemple #2
0
 /// <summary>
 /// 处理分组内所有按钮的鼠标弹起事件
 /// </summary>
 /// <param name="backBufferBitmap">当前双缓冲绘图缓存的背景图片</param>
 /// <param name="offsetPoint">偏移点,用于消除窗口最大化时窗口边框厚度对点计算造成的误差</param>
 /// <param name="p">鼠标位置</param>
 public void OnMouseUp(Image backBufferBitmap, Point offsetPoint, Point p)
 {
     //当Button有重叠的时候,从最上层的Button开始遍历
     for (int i = this._buttonList.Count - 1; i >= 0; i--)
     {
         DUIButton button = this._buttonList[i];
         if (button.Visible == true &&
             button.Status == ButtonStatus.Down &&
             button.RectangleContains(backBufferBitmap, offsetPoint, p))
         {
             button.Status = ButtonStatus.Normal;
             button.InvokeClickHandler();
         }
     }
 }
Exemple #3
0
        /// <summary>
        /// 处理分组内所有按钮的鼠标移过焦点事件
        /// </summary>
        /// <param name="backBufferBitmap">当前双缓冲绘图缓存的背景图片</param>
        /// <param name="offsetPoint">偏移点,用于消除窗口最大化时窗口边框厚度对点计算造成的误差</param>
        /// <param name="p">鼠标位置</param>
        /// <returns>若本组内有按钮命中移过测试,且状态被改变,则返回true,否则返回false.</returns>
        public bool OnMouseMove(Image backBufferBitmap, Point offsetPoint, Point p)
        {
            ////当Button有重叠的时候,从最上层的Button开始遍历
            //for (int i = this._buttonList.Count-1; i >=0 ; i--)
            //{
            //    Button button = this._buttonList[i];
            //    if (button.Visible == true
            //        && button.Status != ButtonStatus.Hover
            //        && button.RectangleContains(backBufferBitmap, offsetPoint, p))
            //    {
            //        ResetAllButtonStatus(ButtonStatus.Normal);
            //        button.Status = ButtonStatus.Hover;

            //        //当有一个按钮获得鼠标焦点时,立即返回true,那么其他分组将不再做焦点获得处理
            //        //任何时候只有一个按钮能获得焦点
            //        return true;
            //    }
            //}
            //return false;
            bool HitButton = false; //标识是否有按钮命中

            for (int i = this._buttonList.Count - 1; i >= 0; i--)
            {
                DUIButton button = this._buttonList[i];
                if (button.Visible == true)
                {
                    if (button.RectangleContains(backBufferBitmap, offsetPoint, p))
                    {
                        if (button.Status != ButtonStatus.Down)
                        {
                            button.Status = ButtonStatus.Hover;
                            HitButton     = true;
                        }
                    }
                    else
                    {
                        button.Status = ButtonStatus.Normal;
                    }
                }
            }
            return(HitButton);
        }