ControlButton.vb
上传用户:szledliu
上传日期:2021-01-29
资源大小:13805k
文件大小:5k
源码类别:

C#编程

开发平台:

C#

  1. Imports System.ComponentModel
  2. Friend Class ControlButton
  3.     Sub New()
  4.         ' This call is required by the Windows Form Designer.
  5.         InitializeComponent()
  6.         ' Add any initialization after the InitializeComponent() call.
  7.         Me.SuspendLayout()
  8.         Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
  9.         MyBase.BackColor = Color.Transparent
  10.         ResetBackHighColor()
  11.         ResetBackLowColor()
  12.         ResetBorderColor()
  13.         Me.ResumeLayout()
  14.     End Sub
  15.     Enum ButtonStyle
  16.         Close
  17.         Drop
  18.     End Enum
  19.     Private m_hot As Boolean = False
  20.     Private m_BackHighColor As Color
  21.     Private m_BackLowColor As Color
  22.     Private m_BorderColor As Color
  23.     Private m_style As ButtonStyle
  24.     Private m_RenderMode As ToolStripRenderMode
  25.     Private ReadOnly defaultBackHighColor As Color = SystemColors.ControlLightLight
  26.     Private ReadOnly defaultBackLowColor As Color = SystemColors.ControlDark
  27.     Private ReadOnly defaultBorderColor As Color = SystemColors.ControlDarkDark
  28.     Friend Property RenderMode() As ToolStripRenderMode
  29.         Get
  30.             Return m_RenderMode
  31.         End Get
  32.         Set(ByVal value As ToolStripRenderMode)
  33.             m_RenderMode = value
  34.             Invalidate()
  35.         End Set
  36.     End Property
  37.     Property Style() As ButtonStyle
  38.         Get
  39.             Return m_style
  40.         End Get
  41.         Set(ByVal value As ButtonStyle)
  42.             m_style = value
  43.         End Set
  44.     End Property
  45.     <Browsable(True), Category("Appearance")> _
  46.     Public Property BackHighColor() As System.Drawing.Color
  47.         Get
  48.             Return m_BackHighColor
  49.         End Get
  50.         Set(ByVal Value As Color)
  51.             m_BackHighColor = Value
  52.         End Set
  53.     End Property
  54.     Public Function ShouldSerializeBackHighColor() As Boolean
  55.         Return m_BackHighColor <> Me.defaultBackHighColor
  56.     End Function
  57.     Public Sub ResetBackHighColor()
  58.         m_BackHighColor = Me.defaultBackHighColor
  59.     End Sub
  60.     <Browsable(True), Category("Appearance")> _
  61.     Public Property BackLowColor() As Color
  62.         Get
  63.             Return m_BackLowColor
  64.         End Get
  65.         Set(ByVal Value As Color)
  66.             m_BackLowColor = Value
  67.         End Set
  68.     End Property
  69.     Public Function ShouldSerializeBackLowColor() As Boolean
  70.         Return m_BackLowColor <> Me.defaultBackLowColor
  71.     End Function
  72.     Public Sub ResetBackLowColor()
  73.         m_BackLowColor = Me.defaultBackLowColor
  74.     End Sub
  75.     <Browsable(True), Category("Appearance")> _
  76.     Public Property BorderColor() As Color
  77.         Get
  78.             Return m_BorderColor
  79.         End Get
  80.         Set(ByVal Value As Color)
  81.             m_BorderColor = Value
  82.         End Set
  83.     End Property
  84.     Public Function ShouldSerializeBorderColor() As Boolean
  85.         Return m_BorderColor <> Me.defaultBorderColor
  86.     End Function
  87.     Public Sub ResetBorderColor()
  88.         m_BorderColor = Me.defaultBorderColor
  89.     End Sub
  90.     <DebuggerStepThrough()> _
  91.     Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
  92.         Dim DropPoints() As System.Drawing.Point = {New Point(0, 0), New Point(11, 0), New Point(5, 6)}
  93.         Dim ClosePoints() As System.Drawing.Point = {New Point(0, 0), New Point(2, 0), New Point(5, 3), New Point(8, 0), New Point(10, 0), New Point(6, 4), New Point(10, 8), New Point(8, 8), New Point(5, 5), New Point(2, 8), New Point(0, 8), New Point(4, 4)}
  94.         Dim rec As New Rectangle
  95.         rec.Size = New Size(Me.Width - 1, Me.Height - 1)
  96.         If m_hot Then
  97.             e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
  98.             e.Graphics.FillRectangle(New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(0, Me.Height), RenderColors.ControlButtonBackHighColor(m_RenderMode, m_BackHighColor), RenderColors.ControlButtonBackLowColor(m_RenderMode, m_BackLowColor)), rec)
  99.             e.Graphics.DrawRectangle(New Pen(RenderColors.ControlButtonBorderColor(m_RenderMode, m_BorderColor)), rec)
  100.             e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.Default
  101.         End If
  102.         Dim g As New Drawing2D.GraphicsPath
  103.         Dim m As New Drawing2D.Matrix
  104.         Dim x As Integer = (Me.Width - 11) / 2
  105.         Dim y As Integer = (Me.Height - 11) / 2 + 1
  106.         If m_style = ButtonStyle.Drop Then
  107.             e.Graphics.FillRectangle(New SolidBrush(ForeColor), x, y, 11, 2)
  108.             g.AddPolygon(DropPoints)
  109.             m.Translate(x, y + 3)
  110.             g.Transform(m)
  111.             e.Graphics.FillPolygon(New SolidBrush(ForeColor), g.PathPoints)
  112.         Else
  113.             g.AddPolygon(ClosePoints)
  114.             m.Translate(x, y)
  115.             g.Transform(m)
  116.             e.Graphics.DrawPolygon(New Pen(ForeColor), g.PathPoints)
  117.             e.Graphics.FillPolygon(New SolidBrush(ForeColor), g.PathPoints)
  118.         End If
  119.         g.Dispose()
  120.         m.Dispose()
  121.     End Sub
  122.     Private Sub MdiTab_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseEnter
  123.         m_hot = True
  124.         Invalidate()
  125.     End Sub
  126.     Private Sub MdiTab_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
  127.         m_hot = False
  128.         Invalidate()
  129.     End Sub
  130. End Class