重画系列:双色Button (转)

重画系列:双色Button (转)[@more@]

效果如下图:

比较简单,下面是源代码,新建一类库工程,拷贝以下源代码覆盖Class1,生成Dll文件就可以使用了

Public Class XpStyleButton
  Inherits System.windows.Forms.UserControl

#Region " Windows 窗体设计器生成的代码 "

  Public Sub New()
  MyBase.New()

  '该调用是 Windows 窗体设计器所必需的。
  InitializeComponent()

  '在 InitializeComponent() 调用之后添加任何初始化
  setstyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or ControlStyles.UserPaint, True)
  End Sub

  'UserControl1 重写 dispose 以清理组件列表。
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
  If disposing Then
  If Not (components Is Nothing) Then
  components.Dispose()
  End If
  End If
  MyBase.Dispose(disposing)
  End Sub

  'Windows 窗体设计器所必需的
  Private components As System.ComponentModel.IContainer

  '注意:以下过程是 Windows 窗体设计器所必需的
  '可以使用 Windows 窗体设计器修改此过程。
  '不要使用代码编辑器修改它。
  buggerStepThrough()> Private Sub InitializeComponent()
  '
  'XpStyleButton
  '
  Me.Name = "XpStyleButton"
  Me.Size = New System.Drawing.Size(264, 88)

  End Sub

#End Region
  Private IsMouseDown As Boolean = False
  Private xMagin As Integer = 2
  Private yMagin As Integer = 2
  Private m_BackColor As Color = Color.BurlyWood
  Private m_ForeColor As Color = Color.White
  Private m_Style As Style = Style.RectStyle
  'button's Styles
  Public Enum Style
  RectStyle = 0
  EllipseStyle = 1
  CircleStyle = 2
  End Enum


  '--------------------对外属性--------------
  '亮色
  Public Property LightColor() As Color
  Get
  Return m_ForeColor
  End Get
  Set(ByVal Value As Color)
  m_ForeColor = Value
  End Set
  End Property
  '暗色
  Public Property GrayColor() As Color
  Get
  Return Me.m_BackColor
  End Get
  Set(ByVal Value As Color)
  Me.m_BackColor = Value
  End Set
  End Property
  Public Property ButtonStyle() As Style
  Get
  Return Me.m_Style
  End Get
  Set(ByVal Value As Style)
  If Value = Style.CircleStyle Then
  Me.Height = Me.Width
  End If
  Me.m_Style = Value
  End Set
  End Property
  '在这里实现重画双色Button
  Private Sub XpStyleButton_Paint(ByVal sender As object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
  Me.BackColor = Me.Parent.BackColor
  Dim brush As Drawing.Drawing2D.LinearGradientBrush
  Dim brush1 As Drawing.Drawing2D.LinearGradientBrush
  brush = New Drawing.Drawing2D.LinearGradientBrush(New PointF(0, 0), New PointF(0, Me.Height), Me.m_ForeColor, Me.m_BackColor)
  '对鼠标单击响应
  If Me.IsMouseDown Then
  brush1 = New Drawing.Drawing2D.LinearGradientBrush(New PointF(xMagin, yMagin), New PointF(xMagin, Me.Height), Color.FromArgb(0, 255, 255, 255), Color.FromArgb(150, 255, 255, 255))
  Else
  brush1 = New Drawing.Drawing2D.LinearGradientBrush(New PointF(xMagin, yMagin), New PointF(xMagin, Me.Height / 2), Color.FromArgb(150, 255, 255, 255), Color.FromArgb(0, 255, 255, 255))
  End If
  brush.WrapMode = Drawing.Drawing2D.WrapMode.TileFlipX
  brush1.WrapMode = Drawing.Drawing2D.WrapMode.TileFlipX

  Dim rect As Rectangle = New Rectangle(0, 0, Me.Width - xMagin, Me.Height - yMagin)
  Dim rect1 As Rectangle = New Rectangle(xMagin, yMagin, Me.Width - 2 * xMagin, Me.Height / 2)
  select Case Me.m_Style
  Case Style.RectStyle
  Me.DrawRectStyle(e.Graphics, rect, rect1, brush, brush1)
  Case Style.EllipseStyle
  Me.DrawEllipseStyle(e.Graphics, rect, rect1, brush, brush1)
  Case Style.CircleStyle
  Me.DrawEllipseStyle(e.Graphics, rect, rect1, brush, brush1)
  Case Else
  Me.DrawRectStyle(e.Graphics, rect, rect1, brush, brush1)
  End Select

  End Sub
  '画椭圆形按钮(圆型按钮也是由它重画)
  Private Sub DrawEllipseStyle(ByRef g As Graphics, ByVal rect As Rectangle, ByVal rect1 As Rectangle, ByVal bbrush As Brush, ByVal fbrush As Brush)
  g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
  g.FillEllipse(bbrush, rect)
  g.FillEllipse(fbrush, rect)
  g.DrawEllipse(New Pen(m_BackColor), rect)
  End Sub
  '画矩形按钮
  Private Sub DrawRectStyle(ByRef g As Graphics, ByVal rect As Rectangle, ByVal rect1 As Rectangle, ByVal bbrush As Brush, ByVal fbrush As Brush)
  g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
  g.FillRectangle(bbrush, rect)
  g.FillRectangle(fbrush, rect)
  g.DrawRectangle(New Pen(m_BackColor), rect)
  End Sub
  Private Sub XpStyleButton_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
  IsMouseDown = True
  Me.Refresh()
  End Sub

  Private Sub XpStyleButton_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
  IsMouseDown = False
  Me.Refresh()
  End Sub


End Class
以下是测试的源代码,需要添加上面生成的Dll的引用:

Public Class Form1
  Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

  Public Sub New()
  MyBase.New()

  '该调用是 Windows 窗体设计器所必需的。
  InitializeComponent()

  '在 InitializeComponent() 调用之后添加任何初始化

  End Sub

  '窗体重写处置以清理组件列表。
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
  If disposing Then
  If Not (components Is Nothing) Then
  components.Dispose()
  End If
  End If
  MyBase.Dispose(disposing)
  End Sub
  Private button1 As XPStyleButton.XpStyleButton
  'Windows 窗体设计器所必需的
  Private components As System.ComponentModel.IContainer

  '注意:以下过程是 Windows 窗体设计器所必需的
  '可以使用 Windows 窗体设计器修改此过程。
  '不要使用代码编辑器修改它。
  Friend WithEvents XpStyleButton1 As XPStyleButton.XpStyleButton
  Friend WithEvents XpStyleButton4 As XPStyleButton.XpStyleButton
  Private Sub InitializeComponent()
  Me.button1 = New XPStyleButton.XpStyleButton()
  Me.XpStyleButton1 = New XPStyleButton.XpStyleButton()
  Me.XpStyleButton4 = New XPStyleButton.XpStyleButton()
  Me.SuspendLayout()
  '
  'button1
  '
  Me.button1.BackColor = System.Drawing.SystemColors.Control
  Me.button1.ButtonStyle = XPStyleButton.XpStyleButton.Style.RectStyle
  Me.button1.ForeColor = System.Drawing.Color.White
  Me.button1.GrayColor = System.Drawing.Color.FromArgb(CType(0, Byte), CType(192, Byte), CType(0, Byte))
  Me.button1.LightColor = System.Drawing.SystemColors.HighlightText
  Me.button1.Location = New System.Drawing.Point(56, 32)
  Me.button1.Name = "button1"
  Me.button1.Size = New System.Drawing.Size(88, 25)
  Me.button1.TabIndex = 0
  '
  'XpStyleButton1
  '
  Me.XpStyleButton1.BackColor = System.Drawing.SystemColors.Control
  Me.XpStyleButton1.ButtonStyle = XPStyleButton.XpStyleButton.Style.CircleStyle
  Me.XpStyleButton1.GrayColor = System.Drawing.Color.Blue
  Me.XpStyleButton1.LightColor = System.Drawing.Color.White
  Me.XpStyleButton1.Location = New System.Drawing.Point(280, 24)
  Me.XpStyleButton1.Name = "XpStyleButton1"
  Me.XpStyleButton1.Size = New System.Drawing.Size(104, 64)
  Me.XpStyleButton1.TabIndex = 1
  '
  'XpStyleButton4
  '
  Me.XpStyleButton4.BackColor = System.Drawing.SystemColors.Control
  Me.XpStyleButton4.ButtonStyle = XPStyleButton.XpStyleButton.Style.CircleStyle
  Me.XpStyleButton4.GrayColor = System.Drawing.Color.BurlyWood
  Me.XpStyleButton4.LightColor = System.Drawing.Color.White
  Me.XpStyleButton4.Location = New System.Drawing.Point(168, 16)
  Me.XpStyleButton4.Name = "XpStyleButton4"
  Me.XpStyleButton4.Size = New System.Drawing.Size(96, 96)
  Me.XpStyleButton4.TabIndex = 2
  '
  'Form1
  '
  Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
  Me.ClientSize = New System.Drawing.Size(520, 273)
  Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.button1, Me.XpStyleButton4, Me.XpStyleButton1})
  Me.Name = "Form1"
  Me.Text = "Form1"
  Me.ResumeLayout(False)

  End Sub

#End Region

End Class
谢谢阅读,希望有什么意见能和我联系,Mailto:ganenping@mainone.com.cn">ganenping@mainone.com.cn qq: 44460100


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10794571/viewspace-974803/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10794571/viewspace-974803/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值