diff --git a/Bin/net40/SunnyUI.Demo.exe b/Bin/net40/SunnyUI.Demo.exe
index a6c9f1be..783ddb8e 100644
Binary files a/Bin/net40/SunnyUI.Demo.exe and b/Bin/net40/SunnyUI.Demo.exe differ
diff --git a/Bin/net40/SunnyUI.dll b/Bin/net40/SunnyUI.dll
index 76d4e32e..8959fec2 100644
Binary files a/Bin/net40/SunnyUI.dll and b/Bin/net40/SunnyUI.dll differ
diff --git a/SunnyUI.Demo/Controls/FLabel.Designer.cs b/SunnyUI.Demo/Controls/FLabel.Designer.cs
index fe769f88..8eac30f1 100644
--- a/SunnyUI.Demo/Controls/FLabel.Designer.cs
+++ b/SunnyUI.Demo/Controls/FLabel.Designer.cs
@@ -45,6 +45,10 @@ namespace Sunny.UI.Demo
this.uiLabel3 = new Sunny.UI.UILabel();
this.uiLabel4 = new Sunny.UI.UILabel();
this.uiLine5 = new Sunny.UI.UILine();
+ this.label1 = new System.Windows.Forms.Label();
+ this.uiSmoothLabel1 = new Sunny.UI.UISmoothLabel();
+ this.uiSmoothLabel2 = new Sunny.UI.UISmoothLabel();
+ this.uiLine6 = new Sunny.UI.UILine();
this.SuspendLayout();
//
// uiMarkLabel4
@@ -89,6 +93,7 @@ namespace Sunny.UI.Demo
// uiLine4
//
this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine4.LineDashStyle = Sunny.UI.UILineDashStyle.None;
this.uiLine4.Location = new System.Drawing.Point(30, 208);
this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine4.Name = "uiLine4";
@@ -137,6 +142,7 @@ namespace Sunny.UI.Demo
// uiLine3
//
this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine3.LineDashStyle = Sunny.UI.UILineDashStyle.None;
this.uiLine3.Location = new System.Drawing.Point(30, 133);
this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine3.Name = "uiLine3";
@@ -148,6 +154,7 @@ namespace Sunny.UI.Demo
// uiLine2
//
this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine2.LineDashStyle = Sunny.UI.UILineDashStyle.None;
this.uiLine2.Location = new System.Drawing.Point(381, 55);
this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine2.Name = "uiLine2";
@@ -159,6 +166,7 @@ namespace Sunny.UI.Demo
// uiLine1
//
this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine1.LineDashStyle = Sunny.UI.UILineDashStyle.None;
this.uiLine1.Location = new System.Drawing.Point(30, 55);
this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine1.Name = "uiLine1";
@@ -231,6 +239,7 @@ namespace Sunny.UI.Demo
// uiLine5
//
this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine5.LineDashStyle = Sunny.UI.UILineDashStyle.None;
this.uiLine5.Location = new System.Drawing.Point(30, 290);
this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16);
this.uiLine5.Name = "uiLine5";
@@ -239,11 +248,54 @@ namespace Sunny.UI.Demo
this.uiLine5.Text = "UILabel(旋转角度)";
this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(522, 171);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(55, 21);
+ this.label1.TabIndex = 52;
+ this.label1.Text = "label1";
+ //
+ // uiSmoothLabel1
+ //
+ this.uiSmoothLabel1.Font = new System.Drawing.Font("微软雅黑", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.uiSmoothLabel1.Location = new System.Drawing.Point(381, 313);
+ this.uiSmoothLabel1.Name = "uiSmoothLabel1";
+ this.uiSmoothLabel1.Size = new System.Drawing.Size(258, 66);
+ this.uiSmoothLabel1.TabIndex = 53;
+ this.uiSmoothLabel1.Text = "SunnyUI";
+ //
+ // uiSmoothLabel2
+ //
+ this.uiSmoothLabel2.Font = new System.Drawing.Font("Jokerman", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.uiSmoothLabel2.Location = new System.Drawing.Point(381, 386);
+ this.uiSmoothLabel2.Name = "uiSmoothLabel2";
+ this.uiSmoothLabel2.Size = new System.Drawing.Size(284, 83);
+ this.uiSmoothLabel2.TabIndex = 54;
+ this.uiSmoothLabel2.Text = "SunnyUI";
+ //
+ // uiLine6
+ //
+ this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 12F);
+ this.uiLine6.LineDashStyle = Sunny.UI.UILineDashStyle.None;
+ this.uiLine6.Location = new System.Drawing.Point(381, 290);
+ this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16);
+ this.uiLine6.Name = "uiLine6";
+ this.uiLine6.Size = new System.Drawing.Size(319, 20);
+ this.uiLine6.TabIndex = 55;
+ this.uiLine6.Text = "UISmoothLabel";
+ this.uiLine6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
// FLabel
//
this.AllowShowTitle = true;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
- this.ClientSize = new System.Drawing.Size(800, 450);
+ this.ClientSize = new System.Drawing.Size(800, 504);
+ this.Controls.Add(this.uiLine6);
+ this.Controls.Add(this.uiSmoothLabel2);
+ this.Controls.Add(this.uiSmoothLabel1);
+ this.Controls.Add(this.label1);
this.Controls.Add(this.uiLine5);
this.Controls.Add(this.uiLabel4);
this.Controls.Add(this.uiLabel3);
@@ -287,5 +339,9 @@ namespace Sunny.UI.Demo
private UILabel uiLabel3;
private UILabel uiLabel4;
private UILine uiLine5;
+ private System.Windows.Forms.Label label1;
+ private UISmoothLabel uiSmoothLabel1;
+ private UISmoothLabel uiSmoothLabel2;
+ private UILine uiLine6;
}
}
\ No newline at end of file
diff --git a/SunnyUI/Controls/UISmoothLabel.cs b/SunnyUI/Controls/UISmoothLabel.cs
new file mode 100644
index 00000000..9729cdf5
--- /dev/null
+++ b/SunnyUI/Controls/UISmoothLabel.cs
@@ -0,0 +1,272 @@
+/******************************************************************************
+ * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。
+ * CopyRight (C) 2012-2022 ShenYongHua(沈永华).
+ * QQ群:56829229 QQ:17612584 EMail:SunnyUI@QQ.Com
+ *
+ * Blog: https://www.cnblogs.com/yhuse
+ * Gitee: https://gitee.com/yhuse/SunnyUI
+ * GitHub: https://github.com/yhuse/SunnyUI
+ *
+ * SunnyUI.dll can be used for free under the GPL-3.0 license.
+ * If you use this code, please keep this note.
+ * 如果您使用此代码,请保留此说明。
+ ******************************************************************************
+ * 文件名称: UISmoothLabel.cs
+ * 文件说明: 平滑文字带边框的标签
+ * 当前版本: V3.1
+ * 创建日期: 2022-01-22
+ *
+ * 2022-01-22: V3.1.0 增加文件说明
+******************************************************************************/
+
+
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+
+namespace Sunny.UI
+{
+ [ToolboxItem(true)]
+ [DefaultEvent("Click")]
+ [DefaultProperty("Text")]
+ public class UISmoothLabel : Label, IStyleInterface
+ {
+ public UISmoothLabel()
+ {
+ base.Font = UIFontColor.Font(36);
+ Version = UIGlobal.Version;
+ drawPath = new GraphicsPath();
+ drawPen = new Pen(new SolidBrush(rectColor), rectSize);
+ forecolorBrush = new SolidBrush(ForeColor);
+ Size = new Size(300, 60);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ forecolorBrush?.Dispose();
+ drawPath?.Dispose();
+ drawPen?.Dispose();
+ }
+
+ base.Dispose(disposing);
+ }
+
+ private PointF point;
+ private SizeF drawSize;
+ private Pen drawPen;
+ private GraphicsPath drawPath;
+ private SolidBrush forecolorBrush;
+
+ [Browsable(false), DefaultValue(false)]
+ public bool IsScaled { get; set; }
+
+ public void SetDPIScale()
+ {
+ if (!IsScaled)
+ {
+ this.SetDPIScaleFont();
+ IsScaled = true;
+ }
+ }
+
+ private Color foreColor = UIStyles.GetStyleColor(UIStyle.Blue).LabelForeColor;
+
+ //
+ /// Tag字符串
+ ///
+ [DefaultValue(null)]
+ [Description("获取或设置包含有关控件的数据的对象字符串"), Category("SunnyUI")]
+ public string TagString { get; set; }
+
+ ///
+ /// 字体颜色
+ ///
+ [Description("字体颜色"), Category("SunnyUI")]
+ [DefaultValue(typeof(Color), "White")]
+ public override Color ForeColor
+ {
+ get => foreColor;
+ set
+ {
+ foreColor = value;
+ forecolorBrush.Color = foreColor;
+ _style = UIStyle.Custom;
+ Invalidate();
+ }
+ }
+
+ public string Version { get; }
+
+ public void SetStyle(UIStyle style)
+ {
+ UIBaseStyle uiColor = UIStyles.GetStyleColor(style);
+ if (!uiColor.IsCustom()) SetStyleColor(uiColor);
+ _style = style;
+ }
+
+ ///
+ /// 自定义主题风格
+ ///
+ [DefaultValue(false)]
+ [Description("获取或设置可以自定义主题风格"), Category("SunnyUI")]
+ public bool StyleCustomMode { get; set; }
+
+ public virtual void SetStyleColor(UIBaseStyle uiColor)
+ {
+ foreColor = uiColor.ButtonForeColor;
+ forecolorBrush.Color = foreColor;
+ rectColor = uiColor.ButtonFillColor;
+ if (rectSize != 0) drawPen.Color = rectColor;
+ Invalidate();
+ }
+
+ private UIStyle _style = UIStyle.Blue;
+
+ ///
+ /// 主题样式
+ ///
+ [DefaultValue(UIStyle.Blue), Description("主题样式"), Category("SunnyUI")]
+ public UIStyle Style
+ {
+ get => _style;
+ set => SetStyle(value);
+ }
+
+ protected override void OnFontChanged(EventArgs e)
+ {
+ base.OnFontChanged(e);
+ Invalidate();
+ }
+
+ protected override void OnTextAlignChanged(EventArgs e)
+ {
+ base.OnTextAlignChanged(e);
+ Invalidate();
+ }
+
+ protected Color rectColor = UIStyles.GetStyleColor(UIStyle.Blue).RectColor;
+
+ ///
+ /// 边框颜色
+ ///
+ [Description("边框颜色"), Category("SunnyUI")]
+ [DefaultValue(typeof(Color), "80, 160, 255")]
+ public Color RectColor
+ {
+ get
+ {
+ return rectColor;
+ }
+ set
+ {
+ if (rectColor != value)
+ {
+ rectColor = value;
+ if (rectSize != 0) drawPen.Color = rectColor;
+ RectColorChanged?.Invoke(this, null);
+ _style = UIStyle.Custom;
+ Invalidate();
+ }
+ }
+ }
+
+ public event EventHandler RectColorChanged;
+
+ private int rectSize = 2;
+
+ ///
+ /// 边框颜色
+ ///
+ [Description("边框宽度"), Category("SunnyUI")]
+ [DefaultValue(2)]
+ public int RectSize
+ {
+ get => rectSize;
+ set
+ {
+ value = Math.Max(0, value);
+ if (rectSize != value)
+ {
+ rectSize = value;
+
+ if (value == 0)
+ {
+ drawPen.Color = Color.Transparent;
+ }
+ else
+ {
+ drawPen.Color = RectColor;
+ drawPen.Width = value;
+ }
+
+ Invalidate();
+ }
+ }
+ }
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ if (Text.IsNullOrEmpty()) return;
+
+ e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
+ e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
+
+ drawSize = e.Graphics.MeasureString(Text, Font, new PointF(), StringFormat.GenericTypographic);
+
+ if (AutoSize)
+ {
+ point.X = Padding.Left;
+ point.Y = Padding.Top;
+ }
+ else
+ {
+ if (TextAlign == ContentAlignment.TopLeft ||
+ TextAlign == ContentAlignment.MiddleLeft ||
+ TextAlign == ContentAlignment.BottomLeft)
+ {
+ point.X = Padding.Left;
+ }
+ else if (TextAlign == ContentAlignment.TopCenter ||
+ TextAlign == ContentAlignment.MiddleCenter ||
+ TextAlign == ContentAlignment.BottomCenter)
+ {
+ point.X = (Width - drawSize.Width) / 2;
+ }
+ else
+ {
+ point.X = Width - (Padding.Right + drawSize.Width);
+ }
+
+ if (TextAlign == ContentAlignment.TopLeft ||
+ TextAlign == ContentAlignment.TopCenter ||
+ TextAlign == ContentAlignment.TopRight)
+ {
+ point.Y = Padding.Top;
+ }
+ else if (TextAlign == ContentAlignment.MiddleLeft ||
+ TextAlign == ContentAlignment.MiddleCenter ||
+ TextAlign == ContentAlignment.MiddleRight)
+ {
+ point.Y = (Height - drawSize.Height) / 2;
+ }
+ else
+ {
+ point.Y = Height - (Padding.Bottom + drawSize.Height);
+ }
+ }
+
+ float fontSize = e.Graphics.DpiY * Font.SizeInPoints / 72;
+
+ drawPath.Reset();
+ drawPath.AddString(Text, Font.FontFamily, (int)Font.Style, fontSize,
+ point, StringFormat.GenericTypographic);
+
+ e.Graphics.FillPath(forecolorBrush, drawPath);
+ e.Graphics.DrawPath(drawPen, drawPath);
+ }
+ }
+}
diff --git a/SunnyUI/Style/UIStyle.cs b/SunnyUI/Style/UIStyle.cs
index ff50fec0..2f896255 100644
--- a/SunnyUI/Style/UIStyle.cs
+++ b/SunnyUI/Style/UIStyle.cs
@@ -711,6 +711,14 @@ namespace Sunny.UI
return new Font("微软雅黑", FontSize, FontStyle.Regular, GraphicsUnit.Point, GdiCharSet);
}
+ ///
+ /// 默认字体
+ ///
+ public static Font Font(float fontSize)
+ {
+ return new Font("微软雅黑", fontSize, FontStyle.Regular, GraphicsUnit.Point, GdiCharSet);
+ }
+
public static float FontSize = 12;
///