using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace GeBoShi.UIKits.MaiMuMenu { #region 色彩定义 public class ColorConfig { #region 字体 /// /// 默认白字 /// private Color _fontcolor = Color.White; /// /// 菜单字体颜色 /// public Color FontColor { get { return this._fontcolor; } set { this._fontcolor = value; } } #endregion private Color _marginstartcolor = Color.FromArgb(72, 92, 172); /// /// 下拉菜单坐标图标区域开始颜色 /// public Color MarginStartColor { get { return this._marginstartcolor; } set { this._marginstartcolor = value; } } private Color _marginendcolor = Color.FromArgb(72, 92, 172); /// /// 下拉菜单坐标图标区域结束颜色 /// public Color MarginEndColor { get { return this._marginendcolor; } set { this._marginendcolor = value; } } #region 下拉项背景 private Color _dropdownitembackcolor = Color.FromArgb(33, 51, 122); /// /// 下拉项背景颜色 /// public Color DropDownItemBackColor { get { return this._dropdownitembackcolor; } set { this._dropdownitembackcolor = value; } } #endregion private Color _dropdownitemstartcolor = Color.BlueViolet; /// /// 下拉项选中时开始颜色 /// public Color DropDownItemStartColor { get { return this._dropdownitemstartcolor; } set { this._dropdownitemstartcolor = value; } } private Color _dorpdownitemendcolor = Color.DarkViolet; /// /// 下拉项选中时结束颜色 /// public Color DropDownItemEndColor { get { return this._dorpdownitemendcolor; } set { this._dorpdownitemendcolor = value; } } #region 主菜单选中颜色 private Color _menuitemstartcolor = Color.FromArgb(72, 92, 172); /// /// 主菜单项选中时的开始颜色 /// public Color MenuItemStartColor { get { return this._menuitemstartcolor; } set { this._menuitemstartcolor = value; } } private Color _menuitemendcolor = Color.FromArgb(72, 92, 172); /// /// 主菜单项选中时的结束颜色 /// public Color MenuItemEndColor { get { return this._menuitemendcolor; } set { this._menuitemendcolor = value; } } #endregion #region 分割线 private Color _separatorcolor = Color.Gray; /// /// 分割线颜色 /// public Color SeparatorColor { get { return this._separatorcolor; } set { this._separatorcolor = value; } } #endregion #region 菜单主背景 private Color _mainmenubackcolor = Color.FromArgb(141, 161, 241); /// /// 主菜单背景色 /// public Color MainMenuBackColor { get { return this._mainmenubackcolor; } set { this._mainmenubackcolor = value; } } private Color _mainmenustartcolor = Color.FromArgb(141, 161, 241); /// /// 主菜单背景开始颜色 /// public Color MainMenuStartColor { get { return this._mainmenustartcolor; } set { this._mainmenustartcolor = value; } } private Color _mainmenuendcolor = Color.FromArgb(141, 161, 241); /// /// 主菜单背景结束颜色 /// public Color MainMenuEndColor { get { return this._mainmenuendcolor; } set { this._mainmenuendcolor = value; } } #endregion private Color _dropdownborder = Color.FromArgb(40, 96, 151); /// /// 下拉区域边框颜色 /// public Color DropDownBorder { get { return this._dropdownborder; } set { this._dropdownborder = value; } } } #endregion #region ToolStripProfessionalRenderer public class MaiMuMenuRender : ToolStripProfessionalRenderer { ColorConfig colorconfig = new ColorConfig();//创建颜色配置类 /// /// 渲染整个背景 /// /// protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) { e.ToolStrip.ForeColor = colorconfig.FontColor; //如果是下拉 if (e.ToolStrip is ToolStripDropDown) { e.Graphics.FillRectangle(new SolidBrush(colorconfig.DropDownItemBackColor), e.AffectedBounds); } //如果是菜单项 else if (e.ToolStrip is MenuStrip) { Blend blend = new Blend(); float[] fs = new float[5] { 0f, 0.3f, 0.5f, 0.8f, 1f }; float[] f = new float[5] { 0f, 0.5f, 0.9f, 0.5f, 0f }; blend.Positions = fs; blend.Factors = f; FillLineGradient(e.Graphics, e.AffectedBounds, colorconfig.MainMenuStartColor, colorconfig.MainMenuEndColor, 90f, blend); } else { base.OnRenderToolStripBackground(e); } } /// /// 渲染下拉左侧图标区域 /// /// protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) { FillLineGradient(e.Graphics, e.AffectedBounds, colorconfig.MarginStartColor, colorconfig.MarginEndColor, 0f, null); } /// /// 渲染菜单项的背景 /// /// protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) { if (e.ToolStrip is MenuStrip) { //如果被选中或被按下 if (e.Item.Selected || e.Item.Pressed) { Blend blend = new Blend(); float[] fs = new float[5] { 0f, 0.3f, 0.5f, 0.8f, 1f }; float[] f = new float[5] { 0f, 0.5f, 1f, 0.5f, 0f }; blend.Positions = fs; blend.Factors = f; FillLineGradient(e.Graphics, new Rectangle(0, 0, e.Item.Size.Width, e.Item.Size.Height), colorconfig.MenuItemStartColor, colorconfig.MenuItemEndColor, 90f, blend); } else base.OnRenderMenuItemBackground(e); } else if (e.ToolStrip is ToolStripDropDown) { if (e.Item.Selected) { FillLineGradient(e.Graphics, new Rectangle(0, 0, e.Item.Size.Width, e.Item.Size.Height), colorconfig.DropDownItemStartColor, colorconfig.DropDownItemEndColor, 90f, null); } } else { base.OnRenderMenuItemBackground(e); } } /// /// 渲染菜单项的分隔线 /// /// protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) { e.Graphics.DrawLine(new Pen(colorconfig.SeparatorColor), 0, 2, e.Item.Width, 2); } /// /// 渲染边框 /// /// protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) { if (e.ToolStrip is ToolStripDropDown) { e.Graphics.DrawRectangle(new Pen(colorconfig.DropDownBorder), new Rectangle(0, 0, e.AffectedBounds.Width - 1, e.AffectedBounds.Height - 1)); } else { base.OnRenderToolStripBorder(e); } } /// /// 渲染箭头 /// /// protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) { e.ArrowColor = Color.Red;//设置为红色,当然还可以 画出各种形状 base.OnRenderArrow(e); } /// /// 填充线性渐变 /// /// 画布 /// 填充区域 /// 开始颜色 /// 结束颜色 /// 角度 /// 对象的混合图案 private void FillLineGradient(Graphics g, Rectangle rect, Color startcolor, Color endcolor, float angle, Blend blend) { LinearGradientBrush linebrush = new LinearGradientBrush(rect, startcolor, endcolor, angle); if (blend != null) { linebrush.Blend = blend; } GraphicsPath path = new GraphicsPath(); path.AddRectangle(rect); g.SmoothingMode = SmoothingMode.AntiAlias; g.FillPath(linebrush, path); } } #endregion }