gpt4 book ai didi

c# - .NET Winforms 垂直进度条文本

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:04 26 4
gpt4 key购买 nike

最近,我的 win 表单应用程序需要一个垂直进度条。派生类如下所示。我还需要在进度条上添加文本。由于透明度问题,它上面的标签不起作用。经过一些研究,我发现了一些东西。但问题是,虽然进度条是垂直的,但它上面的文字却是水平的。我也需要它垂直。我该怎么做?

谢谢。

public class VProgressBar : ProgressBar
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= 0x04;

if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 6)
{
cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
}

return cp;
}
}

protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0x000F)
{
using (Graphics graphics = CreateGraphics())
using (SolidBrush brush = new SolidBrush(ForeColor))
{
SizeF textSize = graphics.MeasureString(Text, Font);
graphics.DrawString(Text, Font, brush, (Width - textSize.Width) / 2, (Height - textSize.Height) / 2);
}
}
}

[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
Refresh();
}
}

[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
public override Font Font
{
get
{
return base.Font;
}
set
{
base.Font = value;
Refresh();
}
}
}

最佳答案

您需要使用 StringFormat使用标志垂直绘制字符串。在您的 WndProc 方法中尝试以下操作:

    protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0x000F)
{
using (Graphics graphics = CreateGraphics())
using (SolidBrush brush = new SolidBrush(ForeColor))
{
StringFormat format = new StringFormat(
StringFormatFlags.DirectionVertical);

SizeF textSize = graphics.MeasureString(Text, Font);
graphics.DrawString(
Text, Font, brush,
(Width / 2 - textSize.Height / 2),
(Height / 2 - textSize.Width / 2),
format);
}
}
}

关于c# - .NET Winforms 垂直进度条文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13839096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com