From bb995fd60370a07673478447739f88cf33b3e02a Mon Sep 17 00:00:00 2001 From: zqm Date: Fri, 7 Nov 2025 10:12:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=BD=93=E5=B0=B1=E7=BB=AA?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=97=B6=E9=BC=A0=E6=A0=87=E7=A7=BB=E5=88=B0?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E5=86=85=E5=A1=AB=E5=85=85=E5=8D=8A=E9=80=8F?= =?UTF-8?q?=E6=98=8E=E8=89=B2=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Setting.cs | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index bbf04bb..f92cb04 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -31,6 +31,7 @@ namespace JoyD.Windows.CS private int _regionCounter = 0; // 叠加层图像 - 用于存储已完成绘制的矩形 private Image _rectangleOverlayImage = null; + private int _hoveredRegionIndex = -1; // 当前悬停的区域索引(-1表示没有悬停在任何区域上) public Setting() { @@ -167,7 +168,7 @@ namespace JoyD.Windows.CS } /// - /// 鼠标移动事件 - 更新矩形大小 + /// 鼠标移动事件 - 更新矩形大小或检测鼠标悬停区域 /// private void PicBoxTemp_MouseMove(object sender, MouseEventArgs e) { @@ -184,6 +185,29 @@ namespace JoyD.Windows.CS picBoxTemp.Invalidate(); } + else if (!_isDrawingMode && !_isDrawing) // 就绪状态 + { + // 将鼠标坐标转换为图像坐标 + Point imagePoint = ControlPointToImagePoint(e.Location); + + // 检查鼠标是否在某个区域内 + int newHoveredRegionIndex = -1; + foreach (RegionInfo region in _drawnRectangles) + { + if (region.ImageRectangle.Contains(imagePoint)) + { + newHoveredRegionIndex = region.Index; + break; + } + } + + // 如果悬停的区域发生变化,更新并触发重绘 + if (newHoveredRegionIndex != _hoveredRegionIndex) + { + _hoveredRegionIndex = newHoveredRegionIndex; + picBoxTemp.Invalidate(); + } + } } /// @@ -362,6 +386,7 @@ namespace JoyD.Windows.CS /// /// 绘制事件 - 显示矩形框(实现图像合并机制) /// 处理叠加层图像的缩放,确保与控件尺寸匹配 + /// 实现鼠标悬停区域填充半透明色功能 /// private void PicBoxTemp_Paint(object sender, PaintEventArgs e) { @@ -378,6 +403,27 @@ namespace JoyD.Windows.CS e.Graphics.DrawImage(_rectangleOverlayImage, destRect, 0, 0, _rectangleOverlayImage.Width, _rectangleOverlayImage.Height, GraphicsUnit.Pixel); } + // 绘制悬停区域的半透明填充(就绪状态) + if (!_isDrawingMode && _hoveredRegionIndex != -1) + { + // 查找当前悬停的区域 + RegionInfo hoveredRegion = _drawnRectangles.FirstOrDefault(r => r.Index == _hoveredRegionIndex); + if (hoveredRegion != null) + { + // 将图像坐标转换为控件坐标 + Rectangle controlRectangle = ImageRectangleToControlRectangle(hoveredRegion.ImageRectangle); + + // 创建半透明的填充颜色(使用区域的颜色,但设置透明度) + Color semiTransparentColor = Color.FromArgb(100, hoveredRegion.Color); + + // 填充半透明矩形 + using (SolidBrush brush = new SolidBrush(semiTransparentColor)) + { + e.Graphics.FillRectangle(brush, controlRectangle); + } + } + } + // 再绘制临时矩形(当前正在绘制的矩形,使用控件坐标) if (!_currentRectangle.IsEmpty && _isDrawingMode && _isDrawing) {