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 } } }