RaUI/Source/ryControls/Gdu.WinFormUI/Forms/ThemeFormBase.cs
如果当时 34a3ef3ed9 ### 2021-02-22更新
------
#### ryControls    V2.1.2102.2201
*.[新增]新加入Gdu.WinformUI控件。
2021-02-22 21:42:59 +08:00

576 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Drawing;
using System.Windows.Forms;
using MGdu.WinFormUI.MyGraphics;
namespace MGdu.WinFormUI
{
/// <summary>
/// 该类封装设置一个主题所需的信息,可以继承该类实现不同的主题
/// </summary>
public class ThemeFormBase
{
#region about theme
/// <summary>
/// 主题名称,用于标识主题,对主题进行简单描述
/// </summary>
public string ThemeName { protected set; get; }
#endregion
#region public info
// form shape about
/// <summary>
/// 窗体边界大小,鼠标移动到该边界将变成指针形状,拖动可改变窗体大小
/// </summary>
public int SideResizeWidth { get; set; }
/// <summary>
/// 窗体边框大小
/// </summary>
public int BorderWidth { get; set; }
/// <summary>
/// 窗体标题栏高度
/// </summary>
public int CaptionHeight { get; set; }
/// <summary>
/// 标题栏图标与窗体左边框的距离
/// </summary>
public int IconLeftMargin { get; set; }
/// <summary>
/// 标题栏图标尺寸
/// </summary>
public Size IconSize { get; set; }
/// <summary>
/// 标题栏文本左边距
/// </summary>
public int TextLeftMargin { get; set; }
/// <summary>
/// 控制按钮(关闭按钮)相对于窗体右上角的偏移量
/// </summary>
public Point ControlBoxOffset { get; set; }
/// <summary>
/// 窗体关闭按钮的尺寸
/// </summary>
public Size CloseBoxSize { get; set; }
/// <summary>
/// 窗体最大化/还原按钮的大小
/// </summary>
public Size MaxBoxSize { get; set; }
/// <summary>
/// 窗体最小化按钮的大小
/// </summary>
public Size MinBoxSize { get; set; }
/// <summary>
/// 关闭/最大化/最小化按钮之间的距离,可以设置成负值使它们重叠
/// </summary>
public int ControlBoxSpace { get; set; }
/// <summary>
/// 窗体圆角程度
/// </summary>
public int Radius { get; set; }
/// <summary>
/// 窗体圆角样式
/// </summary>
public RoundStyle RoundedStyle { get; set; }
/// <summary>
/// 是否使用默认的圆角样式,该样式为左上角和右上角圆角,
/// 最好在窗体边框较粗时才使用该样式
/// </summary>
public bool UseDefaultTopRoundingFormRegion { get; set; }
/// <summary>
/// 是否在标题栏上绘制图标
/// </summary>
public bool DrawCaptionIcon { get; set; }
/// <summary>
/// 是否在标题栏上绘制文本
/// </summary>
public bool DrawCaptionText { get; set; }
// form shadow
/// <summary>
/// 是否显示窗体阴影
/// </summary>
public bool ShowShadow { get; set; }
/// <summary>
/// 窗体阴影大小
/// </summary>
public int ShadowWidth { get; set; }
/// <summary>
/// 拖动窗体阴影是否可以改变窗体大小
/// </summary>
public bool UseShadowToResize { get; set; }
/// <summary>
/// 阴影的颜色,可以设置成其他颜色而不一定是黑色
/// </summary>
public Color ShadowColor { get; set; }
/// <summary>
/// 阴影从里到外是逐渐变浅的这个值设置深色部分的透明度ARGB中的A值
/// </summary>
public int ShadowAValueDark { get; set; }
/// <summary>
/// 阴影从里到外是逐渐变浅的这个值设置浅色部分的透明度ARGB中的A值
/// </summary>
public int ShadowAValueLight { get; set; }
// form other
/// <summary>
/// 是否在客户区边界画线使其看起来有立体感
/// </summary>
public bool SetClientInset { get; set; }
/// <summary>
/// 窗体标题栏文字是否居中显示
/// </summary>
public bool CaptionTextCenter { get; set; }
// form color
/// <summary>
/// 窗体边框最外一像素的颜色
/// </summary>
public Color FormBorderOutterColor { get; set; }
/// <summary>
/// 窗体边框第二最外像素的颜色
/// </summary>
public Color FormBorderInnerColor { get; set; }
/// <summary>
/// 窗体边框其他部分颜色如果窗体边框大小大于2则其他像素将用此颜色画出
/// </summary>
public Color FormBorderInmostColor { get; set; }
/// <summary>
/// 标题栏颜色是从上到下渐变的,这个值设置上边的颜色值
/// </summary>
public Color CaptionBackColorTop { get; set; }
/// <summary>
/// 标题栏颜色是从上到下渐变的,这个值设置下边的颜色值
/// </summary>
public Color CaptionBackColorBottom { get; set; }
/// <summary>
/// 标题栏文字颜色
/// </summary>
public Color CaptionTextColor { get; set; }
/// <summary>
/// 窗体背景颜色该值将覆盖窗体自带的BackColor属性值
/// </summary>
public Color FormBackColor { get; set; }
// control-box color table
/// <summary>
/// 窗体关闭按钮的颜色集合
/// </summary>
public ButtonColorTable CloseBoxColor { get; set; }
/// <summary>
/// 窗体最大化/还原按钮的颜色集合
/// </summary>
public ButtonColorTable MaxBoxColor { get; set; }
/// <summary>
/// 窗体最小化按钮的颜色集合
/// </summary>
public ButtonColorTable MinBoxColor { get; set; }
// control-box image
/// <summary>
/// 默认状态下关闭按钮背景图片
/// </summary>
public Image CloseBoxBackImageNormal { get; set; }
/// <summary>
/// 鼠标移过去时关闭按钮背景图片
/// </summary>
public Image CloseBoxBackImageHover { get; set; }
/// <summary>
/// 鼠标按下时关闭按钮背景图片
/// </summary>
public Image CloseBoxBackImagePressed { get; set; }
/// <summary>
/// 默认状态下最大化按钮背景图片
/// </summary>
public Image MaxBoxBackImageNormal { get; set; }
/// <summary>
/// 鼠标移过去时最大化按钮背景图片
/// </summary>
public Image MaxBoxBackImageHover { get; set; }
/// <summary>
/// 鼠标按下时最大化按钮背景图片
/// </summary>
public Image MaxBoxBackImagePressed { get; set; }
/// <summary>
/// 默认状态下恢复按钮背景图片
/// </summary>
public Image ResBoxBackImageNormal { get; set; }
/// <summary>
/// 鼠标移过去时恢复按钮背景图片
/// </summary>
public Image ResBoxBackImageHover { get; set; }
/// <summary>
/// 鼠标按下时恢复按钮背景图片
/// </summary>
public Image ResBoxBackImagePressed { get; set; }
/// <summary>
/// 默认状态下最小化按钮背景图片
/// </summary>
public Image MinBoxBackImageNormal { get; set; }
/// <summary>
/// 鼠标移过去时最小化按钮背景图片
/// </summary>
public Image MinBoxBackImageHover { get; set; }
/// <summary>
/// 鼠标按下时最小化按钮背景图片
/// </summary>
public Image MinBoxBackImagePressed { get; set; }
#endregion
#region mdi support
// bar overall ---------------------------------------------------------------
/// <summary>
/// 是否用SendMessage的方式切换子窗体以避免子窗体切换时产生的闪烁
/// </summary>
public bool Mdi_UseMsgToActivateChild { get; set; }
/// <summary>
/// Mdi-Bar与窗体左、上、右边界的距离只用到这三个值Bottom值没用到。
/// 用这三个值来确定Mdi-Bar的宽度及其在窗体中的位置
/// </summary>
public Padding Mdi_BarMargin { get; set; }
/// <summary>
/// 内部左边空白,第一个标签将从这个空白距离之后开始
/// </summary>
public int Mdi_BarLeftPadding { get; set; }
/// <summary>
/// 标签栏内部右边空白
/// </summary>
public int Mdi_BarRightPadding { get; set; }
/// <summary>
/// 标签栏背景颜色
/// </summary>
public Color Mdi_BarBackColor { get; set; }
/// <summary>
/// 标签栏边框颜色
/// </summary>
public Color Mdi_BarBorderColor { get; set; }
/// <summary>
/// 标签栏背景图片
/// </summary>
public bool Mdi_DrawBarBackground { get; set; }
/// <summary>
/// 是否显示标签栏边框
/// </summary>
public bool Mdi_DrawBarBorder { get; set; }
// bar bottom region--------------------------------------------------------------
/// <summary>
/// 标签栏下边区域的背景颜色
/// </summary>
public Color Mdi_BarBottomRegionBackColor { get; set; }
/// <summary>
/// 标签栏下边区域的高度
/// </summary>
public int Mdi_BarBottomRegionHeight { get; set; }
// tab ----------------------------------------------------------------------------
/// <summary>
/// 标签高度
/// </summary>
public int Mdi_TabHeight { get; set; }
/// <summary>
/// 被选中的标签高度可以设置成与TabHeight不一样的值以突出显示被选中状态
/// </summary>
public int Mdi_TabHeightActive { get; set; }
/// <summary>
/// 标签之间的距离,设成负值可以使标签有重叠的效果
/// </summary>
public int Mdi_TabAndTabSpace { get; set; }
/// <summary>
/// 标签的最大宽度,任何情况下标签都不能超过这个宽度
/// </summary>
public int Mdi_TabMaxWidth { get; set; }
/// <summary>
/// 标签正常宽度如果标签需要很短的宽度比如20像素就可以显示完上面的文字
/// 但是Mdi-Bar上有足够的空间时标签会以正常宽度比如100像素显示
/// </summary>
public int Mdi_TabNormalWidth { get; set; }
/// <summary>
/// 标签最小宽度,当标签小于这个宽度时将被隐藏
/// </summary>
public int Mdi_TabMinWidth { get; set; }
/// <summary>
/// 标签梯度大小,标签可以不以矩形方式显示,而是有一个梯度/斜度。
/// </summary>
public int Mdi_TabSlopeWidth { get; set; }
/// <summary>
/// 标签顶部空白这个值用于参与计算Mdi-Bar高度计算方式为
/// Mdi-Bar Height = BottomRegionHeight + TabHeight + TabTopSpace
/// </summary>
public int Mdi_TabTopSpace { get; set; }
/// <summary>
/// 标签上是否显示子窗体图标
/// </summary>
public bool Mdi_ShowTabIcon { get; set; }
/// <summary>
/// 标签上是否显示子窗体关闭图标
/// </summary>
public bool Mdi_ShowTabCloseIcon { get; set; } = true;
/// <summary>
/// 选中状态的标签的上部背景色,与下部背景色不同时,标签背景色就有渐变效果
/// </summary>
public Color Mdi_TabActiveBackColorTop { get; set; }
/// <summary>
/// 选中状态的标签的下部背景色,与上部背景色不同时,标签背景色就有渐变效果
/// </summary>
public Color Mdi_TabActiveBackColorBottom { get; set; }
/// <summary>
/// 标签激活时字体颜色
/// </summary>
public Color Mdi_TabActiveForeColor { get; set; } = Color.Black;
/// <summary>
/// 非选中状态的标签的字体颜色
/// </summary>
public Color Mdi_TabDeactiveForeColor { get; set; } = Color.Black;
/// <summary>
/// 非选中状态的标签的上部背景色
/// </summary>
public Color Mdi_TabDeactiveBackColorTop { get; set; }
/// <summary>
/// 非选中状态的标签的下部背景色
/// </summary>
public Color Mdi_TabDeactiveBackColorBottom { get; set; }
/// <summary>
/// 标签外边框颜色
/// </summary>
public Color Mdi_TabOutterBorderColor { get; set; }
/// <summary>
/// 标签内边框颜色,这个颜色一般具有一定的透明度
/// </summary>
public Color Mdi_TabInnerBorderColor { get; set; }
/// <summary>
/// 是否显示标签边框
/// </summary>
public bool Mdi_TabShowBorder { get; set; } = true;
// new tab btn ---------------------------------------------------------------
/// <summary>
/// 是否显示默认的新建标签按钮(NewTabBtn)
/// </summary>
public bool Mdi_ShowNewTabBtn { get; set; }
/// <summary>
/// NewTabBtn与下边框的距离这个值用来定位按钮的Y坐标
/// </summary>
public int Mdi_NewTabBtnBottomSpace { get; set; }
/// <summary>
/// 新建标签按钮与左边框的距离这个值用来定位按钮的X坐标
/// </summary>
public int Mdi_NewTabBtnLeftSpace { get; set; }
/// <summary>
/// 新建标签按钮大小
/// </summary>
public Size Mdi_NewTabBtnSize { get; set; }
/// <summary>
/// 按钮颜色集合
/// </summary>
public ButtonColorTable Mdi_NewTabBtnColor { get; set; }
// list-all-btn ----------------------------------------------------------
/// <summary>
/// 是否一直显示ListAllBtn即使在没有标签被隐藏的情况下
/// </summary>
public bool Mdi_AlwaysShowListAllBtn { get; set; }
/// <summary>
///《显示全部标签》按钮的位置
/// </summary>
public BarButtonAlignmentType Mdi_ListAllBtnAlign { get; set; }
/// <summary>
/// 《显示全部标签》按钮与下边框的距离这个值用来定位按钮的Y坐标
/// </summary>
public int Mdi_ListAllBtnBottomSpace { get; set; }
/// <summary>
/// 《显示全部标签》按钮与左边框的距离这个值用来定位按钮的X坐标
/// </summary>
public int Mdi_ListAllBtnLeftSpace { get; set; }
/// <summary>
/// 《显示全部标签》按钮的颜色
/// </summary>
public ButtonColorTable Mdi_ListAllBtnColor { get; set; }
/// <summary>
/// 《显示全部标签》按钮的大小
/// </summary>
public Size Mdi_ListAllBtnSize { get; set; }
#endregion
/// <summary>
/// 皮肤主题
/// </summary>
public ThemeFormBase()
{
// about theme
ThemeName = "Base Default Theme";
// form shape
SideResizeWidth = 1;
BorderWidth = 1;
CaptionHeight = 26;
IconLeftMargin = 2;
IconSize = new Size(16, 16);
TextLeftMargin = 2;
ControlBoxOffset = new Point(1, 1);
ControlBoxSpace = 2;
Radius = 8;
RoundedStyle = RoundStyle.None;
UseDefaultTopRoundingFormRegion = true;
DrawCaptionIcon = true;
DrawCaptionText = true;
// form shadow
ShowShadow = false;
ShadowWidth = 1;
ShadowColor = Color.Black;
ShadowAValueDark = 80;
ShadowAValueLight = 0;
UseShadowToResize = false;
// form color
//FormBorderInmostColor = FormBorderInnerColor = FormBorderOutterColor
// = ColorHelper.GetLighterColor(Color.FromArgb(75, 159, 216), 10);
//CaptionBackColorBottom = CaptionBackColorTop
// = ColorHelper.GetLighterColor(Color.FromArgb(75, 159, 216), 10);
//CaptionTextColor = Color.Black;
//FormBackColor = SystemColors.Control;
CaptionBackColorTop = Color.FromArgb(51, 76, 95);
CaptionBackColorBottom = Color.FromArgb(51, 76, 95);
FormBackColor = Color.FromArgb(242, 242, 242);
CaptionTextColor = Color.White;
FormBorderOutterColor = FormBorderInnerColor = Color.FromArgb(230, 230, 230);
FormBorderInmostColor = Color.FromArgb(248, 248, 248);
// form other
SetClientInset = true;
CaptionTextCenter = false;
// control box color
CloseBoxSize = MaxBoxSize = MinBoxSize = new Size(30, 23);
ButtonColorTable closeTable = new ButtonColorTable();
closeTable.ForeColorNormal = closeTable.ForeColorHover
= closeTable.ForeColorPressed = Color.FromArgb(249, 240, 223);
closeTable.BackColorHover = Color.FromArgb(217, 71, 71);
closeTable.BackColorPressed = Color.FromArgb(188, 52, 52);
CloseBoxColor = closeTable;
Mdi_ShowTabCloseIcon = false;
ButtonColorTable minTable = new ButtonColorTable();
minTable.ForeColorNormal = minTable.ForeColorHover
= minTable.ForeColorPressed = Color.FromArgb(249, 240, 223);
minTable.BackColorHover = Color.FromArgb(67, 139, 221);
minTable.BackColorPressed = Color.FromArgb(50, 125, 210);
MinBoxColor = MaxBoxColor = minTable;
Mdi_ShowNewTabBtn = false;
//CloseBoxColor = ButtonColorTable.GetDevWhiteThemeCloseBtnColor();
//MaxBoxColor = ButtonColorTable.GetDevWhiteThemeMinMaxBtnColor();
//MinBoxColor = MaxBoxColor;
#region mdi support
// bar overall
Mdi_UseMsgToActivateChild = true;
Mdi_BarMargin = new Padding(6, 38, 100, 0);
Mdi_BarLeftPadding = 3;
Mdi_BarRightPadding = 100;
Mdi_BarBackColor = Color.LightSkyBlue;
Mdi_BarBorderColor = Color.Red;
Mdi_DrawBarBackground = false;
Mdi_DrawBarBorder = false;
// bar bottom region
Mdi_BarBottomRegionBackColor = Color.White;
Mdi_BarBottomRegionHeight = 3;
// tab
Mdi_TabHeight = 26;
Mdi_TabHeightActive = Mdi_TabHeight;
Mdi_TabSlopeWidth = 8;
Mdi_TabAndTabSpace = -Mdi_TabSlopeWidth;
Mdi_TabTopSpace = 2;
Mdi_TabMaxWidth = 360;
Mdi_TabNormalWidth = 180;
Mdi_TabMinWidth = 90;
Mdi_ShowTabIcon = true;
Mdi_TabOutterBorderColor = Color.Gray;
Mdi_TabInnerBorderColor = Color.FromArgb(180, Color.White);
Mdi_TabActiveBackColorTop = Color.White;
Mdi_TabActiveBackColorBottom = Color.FromArgb(248, 248, 248);
Mdi_TabDeactiveBackColorTop = Color.FromArgb(230, 230, 230);
Mdi_TabDeactiveBackColorBottom = Color.FromArgb(230, 230, 230);
// new tab btn
Mdi_ShowNewTabBtn = true;
Mdi_NewTabBtnBottomSpace = 1;
Mdi_NewTabBtnLeftSpace = 4;
Mdi_NewTabBtnSize = new Size(24, 24);
ButtonColorTable NewTabBtnTable = new ButtonColorTable();
NewTabBtnTable.ForeColorNormal = NewTabBtnTable.ForeColorHover
= NewTabBtnTable.ForeColorPressed = Color.Gray;
NewTabBtnTable.BackColorHover = Color.White;
NewTabBtnTable.BackColorPressed = Color.WhiteSmoke;
Mdi_NewTabBtnColor = NewTabBtnTable;
// list all btn
Mdi_AlwaysShowListAllBtn = false;
Mdi_ListAllBtnAlign = BarButtonAlignmentType.Left;
Mdi_ListAllBtnBottomSpace = Mdi_BarBottomRegionHeight + 4;
Mdi_ListAllBtnLeftSpace = 4;
Mdi_ListAllBtnSize = new Size(36, 18);
Mdi_ListAllBtnColor = NewTabBtnTable;
#endregion
}
}
}