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