更新UpdateInfo方法,使用透明色清空Info
This commit is contained in:
@@ -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()
|
||||||
@@ -148,7 +150,7 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
if (DesignMode) return;
|
if (DesignMode) return;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
lock (_infoImageLock)
|
lock (_infoImageLock)
|
||||||
{
|
{
|
||||||
// 检查连接状态
|
// 检查连接状态
|
||||||
@@ -157,14 +159,21 @@ 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)
|
||||||
{
|
{
|
||||||
// 暂停状态 - 最高优先级
|
// 暂停状态 - 最高优先级
|
||||||
// 绘制暂停文本
|
// 绘制暂停文本
|
||||||
string text = "暂停";
|
string text = "暂停";
|
||||||
@@ -182,7 +191,7 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isPingFailed || isDisconnected || isReconnecting)
|
else if (isPingFailed || isDisconnected || isReconnecting)
|
||||||
{
|
{
|
||||||
// 非暂停状态下,检查Ping状态和连接状态
|
// 非暂停状态下,检查Ping状态和连接状态
|
||||||
|
|
||||||
// 确定显示的文本和颜色
|
// 确定显示的文本和颜色
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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绘制到缓冲
|
||||||
|
|||||||
Reference in New Issue
Block a user