using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; using System.Drawing; using ryControls; namespace ryControls { /// /// 类说明:CContextMenuStrip控件的实现用来代替系统的ContextMenuStrip控件 /// //可以使用一个图标来表示控件 ContextMenuStrip快捷菜单 [ToolboxBitmap(typeof(System.Windows.Forms.ContextMenuStrip))] public class RyContextMenuStrip : System.Windows.Forms.ContextMenuStrip { //窗口的边框长 readonly int borderWidth = SystemInformation.BorderSize.Width; /// /// /// public RyContextMenuStrip() : base() { this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); //Office格式颜色 ProfessionalColorTable ColorTable = new ProfessionalColorTable() { UseSystemColors = true }; //是否为设计模式 if (!DesignMode) { this.Renderer = new ryControls.ToolStripRenderer(ColorTable); } else { this.Renderer = new ToolStripProfessionalRenderer(ColorTable); } this.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.Font = new Font(this.Font.FontFamily, 10); } /// /// /// /// public RyContextMenuStrip(IContainer container) : base(container) { this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); ProfessionalColorTable ColorTable = new ProfessionalColorTable() { UseSystemColors = true }; if (!DesignMode) { this.Renderer = new ryControls.ToolStripRenderer(ColorTable); } else { this.Renderer = new ToolStripProfessionalRenderer(ColorTable); } this.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.Font = new Font(this.Font.FontFamily, 10); } /// /// 重写OnCreateControl /// protected override void OnCreateControl() { base.OnCreateControl(); if (!DesignMode) { int Rgn = ryControls.Win32.CreateRoundRectRgn(1, 1, ClientSize.Width, Height, 7, 7); ryControls.Win32.SetWindowRgn(this.Handle, Rgn, true); } int result = ryControls.Win32.SetClassLong(this.Handle, ryControls.Win32.GCL_STYLE, 0); } /// /// 重写OnPaint事件 /// /// protected override void OnPaint(PaintEventArgs e) { if (!DesignMode) { Graphics g = e.Graphics; SolidBrush bruch = new SolidBrush(Color.FromArgb(51, 166, 239)); g.FillRectangle(bruch, 0, 0, 25, this.Height); bruch = new SolidBrush(Color.White); g.FillRectangle(bruch, 27, 0, this.Width - 27, this.Height); Pen pen = new Pen(Color.FromArgb(51, 132, 223), 1f); e.Graphics.DrawPath(pen, CreateRoundedRectanglePath(new Rectangle(1, 1, ClientSize.Width - 3, Height - 3), 5)); } base.OnPaint(e); } /// /// CreateRoundedRectanglePath /// /// Rectangle /// /// internal static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius) { GraphicsPath roundedRect = new GraphicsPath(); roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90); roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y); roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90); roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2); roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90); roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom); roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90); roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2); roundedRect.CloseFigure(); return roundedRect; } } }