更新UpdateInfo方法,使用透明色清空Info

This commit is contained in:
zqm
2025-10-31 14:07:31 +08:00
parent 4629798115
commit 78c46dad6c
2 changed files with 46 additions and 12 deletions

View File

@@ -138,7 +138,9 @@ namespace JoyD.Windows.CS.Toprie
/// 更新InfoImage显示 /// 更新InfoImage显示
/// 1. 如果暂停,显示暂停信息 /// 1. 如果暂停,显示暂停信息
/// 2. 否则如果Ping不通或断开显示重连信息 /// 2. 否则如果Ping不通或断开显示重连信息
/// 3. 否则清空InfoImage /// 3. 否则满足就绪条件
/// - 在就绪条件下,如果有温度数据,显示最高温度
/// - 否则清空Info
/// 4. 最后调用更新UI /// 4. 最后调用更新UI
/// </summary> /// </summary>
private void UpdateInfo() private void UpdateInfo()
@@ -157,12 +159,19 @@ namespace JoyD.Windows.CS.Toprie
bool isPaused = _isPaused; // 使用_isPaused标志判断暂停状态 bool isPaused = _isPaused; // 使用_isPaused标志判断暂停状态
bool isPingFailed = !IsDevicePingable; bool isPingFailed = !IsDevicePingable;
// 获取温度数据
TemperatureData temperatureData = null;
lock (_lastTemperatureDataLock)
{
temperatureData = _lastTemperatureData;
}
// 根据用户要求的优先级显示信息先检查暂停状态然后再检查Ping状态和连接状态 // 根据用户要求的优先级显示信息先检查暂停状态然后再检查Ping状态和连接状态
using (Graphics g = Graphics.FromImage(_infoImage)) using (Graphics g = Graphics.FromImage(_infoImage))
{ {
// 设置半透明背景 // 以透明色清空Info
g.Clear(Color.FromArgb(128, Color.Transparent)); g.Clear(Color.Transparent);
if (isPaused) if (isPaused)
{ {
// 暂停状态 - 最高优先级 // 暂停状态 - 最高优先级
@@ -217,12 +226,36 @@ namespace JoyD.Windows.CS.Toprie
format); format);
} }
} }
else g.Clear(Color.Transparent); else
{
// 就绪条件非暂停、Ping可通、连接正常
if (temperatureData != null)
{
// 有温度数据,显示最高温度
string text = $"最高温度: {temperatureData.MaxTemperature:F2}°C";
Color textColor = Color.White;
using (Font font = new Font("Arial", 24, FontStyle.Bold))
using (SolidBrush textBrush = new SolidBrush(textColor))
{
StringFormat format = new StringFormat() { Alignment = StringAlignment.Center };
// 将最高温度文本居中显示
g.DrawString(text, font, textBrush,
new RectangleF(0, BUFFER_HEIGHT / 2 - 24, BUFFER_WIDTH, 48),
format);
}
}
else
{
// 没有温度数据清空Info
g.Clear(Color.Transparent);
}
}
} }
// 否则清空InfoImage已在开头处理
// 设置显示标志 // 设置显示标志
_isDisplayingInfo = (isPaused || isDisconnected || isReconnecting); _isDisplayingInfo = (isPaused || isDisconnected || isReconnecting || (temperatureData != null));
} }
// 调用更新UI // 调用更新UI

View File

@@ -12,9 +12,10 @@
5. 图像更新时, 保存LastImage, 调用更新到UI 5. 图像更新时, 保存LastImage, 调用更新到UI
6. 2-5 只在非暂停状态下调用更新暂停状态下不更新Info和UI 6. 2-5 只在非暂停状态下调用更新暂停状态下不更新Info和UI
### 更新Info: ### 更新Info:
1. 如果暂停显示暂停信息否则如果Ping不通或断开显示重连信息 1. 以透明色清空Info
2. 如果有温度数据显示最高温度否则清空Info 2. 如果暂停显示暂停信息否则如果Ping不通或断开显示重连信息 否则满足就绪条件
3. 最后调用更新UI 3. 在就绪条件下,如果有温度数据,显示最高温度
4. 最后调用更新UI
### 更新UI: ### 更新UI:
1. 先将LastImage绘制到全局缓冲 1. 先将LastImage绘制到全局缓冲
2. 再将InfoImage绘制到缓冲 2. 再将InfoImage绘制到缓冲