/// <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; } } }
/// <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(); } } }
/// <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); }