Here's an example of a renderer I wrote (not optimized)
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Public Class GrayGradRenderer
Inherits ToolStripRenderer
Dim sbDark As New SolidBrush(Color.FromArgb(145, 145, 145))
Dim sbLight As New SolidBrush(Color.FromArgb(255, 255, 255))
Dim i_Margin As Integer = -1
<DebuggerStepThrough()> Private Sub MoneyMenuRenderer_RenderArrow(ByVal
sender As Object, ByVal e As
System.Windows.Forms.ToolStripArrowRenderEventArgs) Handles Me.RenderArrow
Dim rect As Rectangle = e.ArrowRectangle
rect.Y = rect.Y + 1
rect.Height = rect.Height - 1
If e.Item.Selected Or e.Item.Pressed Then
ControlPaint.DrawMenuGlyph(e.Graphics, rect, MenuGlyph.Arrow,
Color.FromArgb(0, 255, 254, 249), Color.FromArgb(0, 80, 80, 80))
Else
ControlPaint.DrawMenuGlyph(e.Graphics, rect, MenuGlyph.Arrow,
Color.FromArgb(0, 255, 254, 249), Color.FromArgb(0, 91, 91, 91))
End If
End Sub
Private Sub GrayGradRenderer_RenderButtonBackground(ByVal sender As Object,
ByVal e As System.Windows.Forms.ToolStripItemRenderEventArgs) Handles
Me.RenderButtonBackground
Dim radius As Integer = 3
' check for selected checked items
If TypeOf e.Item Is ToolStripButton Then
If CType(e.Item, ToolStripButton).Checked = True Then
e.Graphics.FillRectangle(New SolidBrush(Color.FromArgb(40, Color.DarkBlue)),
0, 0, e.Item.Width - 1, e.Item.Height - 2)
e.Graphics.DrawRectangle(New Pen(Color.FromArgb(200, Color.DarkBlue)), 0, 0,
e.Item.Width - 1, e.Item.Height - 2)
End If
End If
If e.Item.Selected = True Then
DrawRoundedRectangle(e.Graphics, 0, 0, e.Item.Width - 2, e.Item.Height - 2,
5)
End If
End Sub
Private Sub GrayGradRenderer_RenderDropDownButtonBackground(ByVal sender As
Object, ByVal e As System.Windows.Forms.ToolStripItemRenderEventArgs)
Handles Me.RenderDropDownButtonBackground
If e.Item.Selected = True Then
DrawRoundedRectangle(e.Graphics, 0, 0, e.Item.Width - 2, e.Item.Height - 2,
5)
End If
End Sub
Private Sub GrayGradRenderer_RenderGrip(ByVal sender As Object, ByVal e As
System.Windows.Forms.ToolStripGripRenderEventArgs) Handles Me.RenderGrip
If e.GripStyle = ToolStripGripStyle.Visible Then
If e.GripDisplayStyle = ToolStripGripDisplayStyle.Vertical Then
If TypeOf e.ToolStrip Is MenuStrip Then
ControlPaint.DrawBorder3D(e.Graphics, New Rectangle(0, 2,
e.GripBounds.Width, e.GripBounds.Height - 2), Border3DStyle.RaisedInner)
Else
ControlPaint.DrawBorder3D(e.Graphics, New Rectangle(0, 2,
e.GripBounds.Width, e.GripBounds.Height - 4), Border3DStyle.RaisedInner)
End If
Else
If TypeOf e.ToolStrip Is MenuStrip Then
ControlPaint.DrawBorder3D(e.Graphics, New Rectangle(0, 0,
e.GripBounds.Width - 3, e.GripBounds.Height), Border3DStyle.RaisedInner)
Else
ControlPaint.DrawBorder3D(e.Graphics, New Rectangle(2, 0,
e.GripBounds.Width - 2, e.GripBounds.Height), Border3DStyle.RaisedInner)
End If
End If
End If
End Sub
<DebuggerStepThrough()> Private Sub
MoneyMenuRenderer_RenderImageMargin(ByVal sender As Object, ByVal e As
System.Windows.Forms.ToolStripRenderEventArgs) Handles Me.RenderImageMargin
i_Margin = e.AffectedBounds.Width
If My.Computer.Screen.BitsPerPixel > 8 Then
Dim br As New Drawing2D.LinearGradientBrush(e.AffectedBounds,
Color.FromArgb(255, 255, 255), Color.FromArgb(210, 210, 210),
Drawing2D.LinearGradientMode.Horizontal)
e.Graphics.FillRectangle(br, e.AffectedBounds)
Else
e.Graphics.FillRectangle(New SolidBrush(Color.White), 0, 0,
e.AffectedBounds.Width, e.AffectedBounds.Height)
End If
e.Graphics.DrawLine(New Pen(Color.White, 1), i_Margin - 1, 0, i_Margin - 1,
e.AffectedBounds.Height)
e.Graphics.DrawLine(New Pen(Color.FromArgb(145, 145, 145), 1), i_Margin - 2,
0, i_Margin - 2, e.AffectedBounds.Height)
End Sub
<DebuggerStepThrough()> Protected Overrides Sub OnRenderItemText(ByVal e As
System.Windows.Forms.ToolStripItemTextRenderEventArgs)
If e.Item.Selected And Not e.Item.Pressed Then
e.TextColor = Color.White
ElseIf e.Item.Selected And e.Item.Pressed Then
e.TextColor = Color.White
Else
e.TextColor = Color.Black
End If
MyBase.OnRenderItemText(e)
End Sub
<DebuggerStepThrough()> Private Sub MoneyMenuRenderer_RenderItemCheck(ByVal
sender As Object, ByVal e As
System.Windows.Forms.ToolStripItemImageRenderEventArgs) Handles
Me.RenderItemCheck
If e.Item.Pressed Then
ControlPaint.DrawMenuGlyph(e.Graphics, e.ImageRectangle,
MenuGlyph.Checkmark, Color.FromArgb(0, 0, 0), Color.FromArgb(0, 0, 0, 0))
End If
End Sub
' renders menu over background
<DebuggerStepThrough()> Private Sub
MoneyMenuRenderer_RenderMenuItemBackground(ByVal sender As Object, ByVal e
As System.Windows.Forms.ToolStripItemRenderEventArgs) Handles
Me.RenderMenuItemBackground
Dim i_Alpha As Integer = 255
If e.Item.Selected Or e.Item.Pressed Then
DrawRoundedRectangle(e.Graphics, 0, 0, e.Item.Bounds.Width - 2,
e.Item.Bounds.Height - 2, 4)
End If
End Sub
Private Sub GrayGradRenderer_RenderOverflowButtonBackground(ByVal sender As
Object, ByVal e As System.Windows.Forms.ToolStripItemRenderEventArgs)
Handles Me.RenderOverflowButtonBackground
'Dim br As New Drawing2D.LinearGradientBrush(e.Item.Bounds,
Color.FromArgb(200, 200, 200), Color.FromArgb(170, 170, 170),
Drawing2D.LinearGradientMode.Vertical)
' Dim brHover As New Drawing2D.LinearGradientBrush(e.Item.Bounds,
Color.FromArgb(200, 200, 250), Color.FromArgb(170, 170, 230),
Drawing2D.LinearGradientMode.Vertical)
If Not e.Item.Selected = False Then
DrawRoundedRectangle(e.Graphics, 1, 1, e.Item.Width - 2, e.Item.Height - 4,
5)
End If
If e.Item.Pressed = False Then
e.Graphics.DrawString("7", New Font("Marlett", 7, FontStyle.Regular,
GraphicsUnit.Point), Brushes.DarkGray, e.Item.Width - 14, e.Item.Height -
11)
If e.Item.Selected Then
e.Graphics.DrawString("7", New Font("Marlett", 7, FontStyle.Regular,
GraphicsUnit.Point), Brushes.White, e.Item.Width - 15, e.Item.Height - 12)
Else
e.Graphics.DrawString("7", New Font("Marlett", 7, FontStyle.Regular,
GraphicsUnit.Point), Brushes.Black, e.Item.Width - 15, e.Item.Height - 12)
End If
Else
e.Graphics.DrawString("7", New Font("Marlett", 7, FontStyle.Regular,
GraphicsUnit.Point), Brushes.White, e.Item.Width - 14, e.Item.Height - 11)
End If
End Sub
<DebuggerStepThrough()> Private Sub MoneyMenuRenderer_RenderSeparator(ByVal
sender As Object, ByVal e As
System.Windows.Forms.ToolStripSeparatorRenderEventArgs) Handles
Me.RenderSeparator
If e.Vertical = False Then
e.Graphics.DrawLine(New Pen(Color.White, 1), i_Margin, 3,
e.Item.Bounds.Width, 3)
e.Graphics.DrawLine(New Pen(Color.FromArgb(145, 145, 145), 1), i_Margin, 2,
e.Item.Bounds.Width, 2)
Else
e.Graphics.DrawLine(New Pen(Color.FromArgb(145, 145, 145), 1), 1, 2, 1,
e.Item.Bounds.Height - 4)
e.Graphics.DrawLine(New Pen(Color.White, 1), 2, 2, 2, e.Item.Bounds.Height -
4)
End If
End Sub
Private Sub GrayGradRenderer_RenderSplitButtonBackground(ByVal sender As
Object, ByVal e As System.Windows.Forms.ToolStripItemRenderEventArgs)
Handles Me.RenderSplitButtonBackground
If e.Item.Selected = False Then
e.Graphics.DrawString("u", New Font("Marlett", 8, FontStyle.Regular,
GraphicsUnit.Point), Brushes.Black, e.Item.Width - 14, e.Item.Height - 18)
Else
DrawRoundedRectangle(e.Graphics, 0, 0, e.Item.Width - 2, e.Item.Height - 2,
5)
e.Graphics.DrawString("u", New Font("Marlett", 8, FontStyle.Regular,
GraphicsUnit.Point), Brushes.White, e.Item.Width - 14, e.Item.Height - 18)
e.Graphics.DrawLine(New Pen(Color.FromArgb(255, 3, 86, 205)), e.Item.Width -
13, e.Item.Height - 2, e.Item.Width - 13, e.Item.Height - 22)
e.Graphics.DrawLine(New Pen(Color.FromArgb(255, 33, 117, 232)),
e.Item.Width - 12, e.Item.Height - 2, e.Item.Width - 12, e.Item.Height - 22)
End If
End Sub
'renders background of strip
<DebuggerStepThrough()> Private Sub
MoneyMenuRenderer_RenderToolStripBackground(ByVal sender As Object, ByVal e
As System.Windows.Forms.ToolStripRenderEventArgs) Handles
Me.RenderToolStripBackground
If My.Computer.Screen.BitsPerPixel > 8 Then
Dim sbDark As New SolidBrush(Color.FromArgb(145, 145, 145))
Dim sbLight As New SolidBrush(Color.FromArgb(255, 255, 255))
Dim br As New Drawing2D.LinearGradientBrush(e.AffectedBounds,
Color.FromArgb(236, 236, 236), Color.FromArgb(200, 200, 200),
Drawing2D.LinearGradientMode.Vertical)
e.Graphics.FillRectangle(br, e.AffectedBounds)
br.Dispose()
Else
e.Graphics.FillRectangle(Drawing.SystemBrushes.Control, e.AffectedBounds)
End If
End Sub
<DebuggerStepThrough()> Private Sub
MoneyMenuRenderer_RenderToolStripBorder(ByVal sender As Object, ByVal e As
System.Windows.Forms.ToolStripRenderEventArgs) Handles
Me.RenderToolStripBorder
If TypeOf e.ToolStrip Is ToolStripDropDownMenu Then
e.Graphics.DrawRectangle(New Pen(Color.FromArgb(145, 145, 145), 1), 0, 0,
e.AffectedBounds.Width - 1, e.AffectedBounds.Height - 1)
ElseIf TypeOf e.ToolStrip Is StatusStrip Then
e.Graphics.DrawLine(New Pen(Color.FromArgb(255, 255, 255), 1), 0, 0,
e.AffectedBounds.Width, 0)
Else
e.Graphics.DrawLine(New Pen(Color.FromArgb(255, 255, 255), 1), 0, 0,
e.AffectedBounds.Width, 0)
e.Graphics.DrawLine(New Pen(Color.FromArgb(145, 145, 145), 0), 0,
e.AffectedBounds.Height - 1, e.AffectedBounds.Width,
e.AffectedBounds.Height - 1)
End If
End Sub
Public Sub DrawRoundedRectangle(ByVal objGraphics As Graphics, _
ByVal m_intxAxis As Integer, _
ByVal m_intyAxis As Integer, _
ByVal m_intWidth As Integer, _
ByVal m_intHeight As Integer, _
ByVal m_diameter As Integer)
If My.Computer.Screen.BitsPerPixel > 8 Then
Dim i_Alpha As Integer = 255
objGraphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
objGraphics.CompositingMode = Drawing2D.CompositingMode.SourceOver
objGraphics.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
'Dim g As Graphics
Dim BaseRect As New RectangleF(m_intxAxis, m_intyAxis, m_intWidth,
m_intHeight)
Dim ArcRect As New RectangleF(BaseRect.Location, New SizeF(m_diameter,
m_diameter))
Dim br As New Drawing2D.LinearGradientBrush(New Rectangle(m_intxAxis,
m_intyAxis, m_intWidth, m_intHeight), Color.FromArgb(i_Alpha, 40, 130, 234),
Color.FromArgb(i_Alpha, 1, 95, 228), Drawing2D.LinearGradientMode.Vertical)
Dim p As New Drawing2D.GraphicsPath
p.StartFigure()
'top left Arc
p.AddArc(ArcRect, 180, 90)
p.AddLine(m_intxAxis + CInt(m_diameter / 2), m_intyAxis, m_intxAxis +
m_intWidth - CInt(m_diameter / 2), m_intyAxis)
' top right arc
ArcRect.X = BaseRect.Right - m_diameter
p.AddArc(ArcRect, 270, 90)
p.AddLine(m_intxAxis + m_intWidth, m_intyAxis + CInt(m_diameter / 2),
m_intxAxis + m_intWidth, m_intyAxis + m_intHeight - CInt(m_diameter / 2))
' bottom right arc
ArcRect.Y = BaseRect.Bottom - m_diameter
p.AddArc(ArcRect, 0, 90)
p.AddLine(m_intxAxis + CInt(m_diameter / 2), _
m_intyAxis + m_intHeight, _
m_intxAxis + m_intWidth - CInt(m_diameter / 2), _
m_intyAxis + m_intHeight)
' bottom left arc
ArcRect.X = BaseRect.Left
p.AddArc(ArcRect, 90, 90)
p.AddLine( _
m_intxAxis, m_intyAxis + CInt(m_diameter / 2), _
m_intxAxis, _
m_intyAxis + m_intHeight - CInt(m_diameter / 2))
p.CloseAllFigures()
objGraphics.FillPath(br, p)
' draw lines to add depth
Dim pHlight As New Pen(Color.FromArgb(i_Alpha, 64, 144, 236))
Dim pHLightTop As New Pen(Color.FromArgb(i_Alpha, 33, 117, 232))
Dim pShad As New Pen(Color.FromArgb(i_Alpha, 3, 86, 205))
ArcRect = New RectangleF(BaseRect.Location, New SizeF(m_diameter,
m_diameter))
'top left Arc
objGraphics.DrawArc(pHLightTop, ArcRect, 180, 90)
objGraphics.DrawLine(pHLightTop, m_intxAxis + CInt(m_diameter / 2),
m_intyAxis, m_intxAxis + m_intWidth - CInt(m_diameter / 2), m_intyAxis)
' top right arc
ArcRect.X = BaseRect.Right - m_diameter
objGraphics.DrawArc(pShad, ArcRect, 270, 90)
objGraphics.DrawLine(pShad, m_intxAxis + m_intWidth, m_intyAxis +
CInt(m_diameter / 2), m_intxAxis + m_intWidth, m_intyAxis + m_intHeight -
CInt(m_diameter / 2))
' bottom right arc
ArcRect.Y = BaseRect.Bottom - m_diameter
objGraphics.DrawArc(pShad, ArcRect, 0, 90)
objGraphics.DrawLine(pShad, m_intxAxis + CInt(m_diameter / 2), _
m_intyAxis + m_intHeight, _
m_intxAxis + m_intWidth - CInt(m_diameter / 2), _
m_intyAxis + m_intHeight)
' bottom left arc
ArcRect.X = BaseRect.Left
objGraphics.DrawArc(pHLightTop, ArcRect, 90, 90)
objGraphics.DrawLine(pHLightTop, _
m_intxAxis, m_intyAxis + CInt(m_diameter / 2), _
m_intxAxis, _
m_intyAxis + m_intHeight - CInt(m_diameter / 2))
' draw inner lighting
m_diameter = m_diameter - 1
ArcRect = New RectangleF(BaseRect.Location, New SizeF(m_diameter,
m_diameter))
ArcRect.X = ArcRect.X + 1
ArcRect.Y = ArcRect.Y + 1
'top left Arc
objGraphics.DrawArc(pHlight, ArcRect, 180, 90)
objGraphics.DrawLine(pHlight, m_intxAxis + CInt(m_diameter / 2) + 1,
m_intyAxis + 1, m_intxAxis + m_intWidth - CInt(m_diameter / 2) + 1,
m_intyAxis + 1)
' bottom left arc
ArcRect = New RectangleF(BaseRect.Location, New SizeF(m_diameter,
m_diameter))
ArcRect.X = BaseRect.Left + 1
ArcRect.Y = m_intHeight + BaseRect.Height - m_diameter - 1
objGraphics.DrawArc(pHlight, ArcRect, 90, 90)
objGraphics.DrawLine(pHlight, _
m_intxAxis + 1, m_intyAxis + CInt(m_diameter / 2), _
m_intxAxis + 1, _
m_intyAxis + m_intHeight - CInt(m_diameter / 2))
Else
objGraphics.FillRectangle(Drawing.SystemBrushes.Highlight, New
RectangleF(m_intxAxis, m_intyAxis, m_intWidth, m_intHeight))
End If
End Sub
End Class