类QQ的XP BUTTON控件

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Imports System

Imports System.Enum

Imports System.Collections

Imports System.ComponentModel

Imports System.Drawing

Imports System.Data

Imports System.Windows.Forms

Imports System.Drawing.Drawing2D

Imports System.Drawing.Design

Namespace LandlordAspx_xpctrl

Public Class emunType

Public Enum XPStyle

Default1

Blue

OliveGreen

Silver

End Enum

Public Enum BtnShape

Rectangle

Ellipse

End Enum

End Class

Friend NotInheritable Class ControlPaint

Private Sub New()

End Sub

Public Shared ReadOnly Property BorderColor() As Color

Get

Return Color.FromArgb(127, 157, 185)

End Get

End Property

Public Shared ReadOnly Property DisabledBorderColor() As Color

Get

Return Color.FromArgb(201, 199, 186)

End Get

End Property

Public Shared ReadOnly Property ButtonBorderColor() As Color

Get

Return Color.FromArgb(28, 81, 128)

End Get

End Property

Public Shared ReadOnly Property DisabledButtonBorderColor() As Color

Get

Return Color.FromArgb(202, 200, 187)

End Get

End Property

Public Shared ReadOnly Property DisabledBackColor() As Color

Get

Return Color.FromArgb(236, 233, 216)

End Get

End Property

Public Shared ReadOnly Property DisabledForeColor() As Color

Get

Return Color.FromArgb(161, 161, 146)

End Get

End Property

Public Shared Function GetStringFormat(ByVal contentAlignment As ContentAlignment) As StringFormat

If Not System.Enum.IsDefined(GetType(ContentAlignment), CType(contentAlignment, Integer)) Then

Throw New System.ComponentModel.InvalidEnumArgumentException("contentAlignment", CType(contentAlignment, Integer), GetType(ContentAlignment))

End If

Dim stringFormat As StringFormat = New StringFormat

Select Case contentAlignment

Case contentAlignment.MiddleCenter

stringFormat.LineAlignment = StringAlignment.Center

stringFormat.Alignment = StringAlignment.Center

' break

Case contentAlignment.MiddleLeft

stringFormat.LineAlignment = StringAlignment.Center

stringFormat.Alignment = StringAlignment.Near

' break

Case contentAlignment.MiddleRight

stringFormat.LineAlignment = StringAlignment.Center

stringFormat.Alignment = StringAlignment.Far

' break

Case contentAlignment.TopCenter

stringFormat.LineAlignment = StringAlignment.Near

stringFormat.Alignment = StringAlignment.Center

' break

Case contentAlignment.TopLeft

stringFormat.LineAlignment = StringAlignment.Near

stringFormat.Alignment = StringAlignment.Near

' break

Case contentAlignment.TopRight

stringFormat.LineAlignment = StringAlignment.Near

stringFormat.Alignment = StringAlignment.Far

' break

Case contentAlignment.BottomCenter

stringFormat.LineAlignment = StringAlignment.Far

stringFormat.Alignment = StringAlignment.Center

' break

Case contentAlignment.BottomLeft

stringFormat.LineAlignment = StringAlignment.Far

stringFormat.Alignment = StringAlignment.Near

' break

Case contentAlignment.BottomRight

stringFormat.LineAlignment = StringAlignment.Far

stringFormat.Alignment = StringAlignment.Far

' break

End Select

Return stringFormat

End Function

Public Shared Sub DrawRoundedRectangle(ByVal g As Graphics, ByVal p As Pen, ByVal rc As Rectangle, ByVal size As Size)

Dim oldSmoothingMode As SmoothingMode = g.SmoothingMode

g.SmoothingMode = SmoothingMode.AntiAlias

g.DrawLine(p, CType(rc.Left + size.Width / 2, Single), rc.Top, CType(rc.Right - size.Width / 2, Single), rc.Top)

g.DrawArc(p, rc.Right - size.Width, rc.Top, size.Width, size.Height, 270, 90)

g.DrawLine(p, rc.Right, CType(rc.Top + size.Height / 2, Single), rc.Right, CType(rc.Bottom - size.Height / 2, Single))

g.DrawArc(p, rc.Right - size.Width, rc.Bottom - size.Height, size.Width, size.Height, 0, 90)

g.DrawLine(p, CType(rc.Right - size.Width / 2, Single), rc.Bottom, CType(rc.Left + size.Width / 2, Single), rc.Bottom)

g.DrawArc(p, rc.Left, rc.Bottom - size.Height, size.Width, size.Height, 90, 90)

g.DrawLine(p, rc.Left, CType(rc.Bottom - size.Height / 2, Single), rc.Left, CType(rc.Top + size.Height / 2, Single))

g.DrawArc(p, rc.Left, rc.Top, size.Width, size.Height, 180, 90)

g.SmoothingMode = oldSmoothingMode

End Sub

Public Shared Sub DrawBorder(ByVal g As Graphics, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)

g.DrawRectangle(New Pen(ControlPaint.BorderColor, 0), x, y, width, height)

End Sub

Public Shared Sub EraseExcessOldDropDown(ByVal g As Graphics, ByVal newButton As Rectangle)

g.FillRectangle(New SolidBrush(SystemColors.Window), newButton.X - 2, newButton.Y, 2, newButton.Height + 1)

End Sub

End Class

Public Class XP_Button

Inherits System.Windows.Forms.Button

Public Enum ControlState

Normal

Hover

Pressed

Default1

Disabled

End Enum

Private components As System.ComponentModel.Container

Public Sub New()

MyBase.New()

InitializeComponent()

Me.SetStyle(ControlStyles.UserPaint Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer, True)

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

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

'

'XPButton

'

Me.Name = "XPButton"

End Sub

#Region "Static members"

Private Shared ReadOnly sizeBorderPixelIndent As Size = New Size(4, 4)

Dim clrOuterShadow1 As Color = Color.FromArgb(64, 164, 164, 164)

Dim clrOuterShadow2 As Color = Color.FromArgb(64, Color.White)

Dim clrBackground1 As Color = Color.FromArgb(250, 250, 248)

Dim clrBackground2 As Color = Color.FromArgb(240, 240, 234)

Dim clrBorder As Color = Color.FromArgb(0, 60, 116)

Dim clrInnerShadowBottom1 As Color = Color.FromArgb(236, 235, 230)

Dim clrInnerShadowBottom2 As Color = Color.FromArgb(226, 223, 214)

Dim clrInnerShadowBottom3 As Color = Color.FromArgb(214, 208, 197)

Dim clrInnerShadowRight1a As Color = Color.FromArgb(128, 236, 234, 230)

Dim clrInnerShadowRight1b As Color = Color.FromArgb(128, 224, 220, 212)

Dim clrInnerShadowRight2a As Color = Color.FromArgb(128, 234, 228, 218)

Dim clrInnerShadowRight2b As Color = Color.FromArgb(128, 212, 208, 196)

Dim clrInnerShadowBottomPressed1 As Color = Color.FromArgb(234, 233, 227)

Dim clrInnerShadowBottomPressed2 As Color = Color.FromArgb(242, 241, 238)

Dim clrInnerShadowTopPressed1 As Color = Color.FromArgb(209, 204, 193)

Dim clrInnerShadowTopPressed2 As Color = Color.FromArgb(220, 216, 207)

Dim clrInnerShadowLeftPressed1 As Color = Color.FromArgb(216, 213, 203)

Dim clrInnerShadowLeftPressed2 As Color = Color.FromArgb(222, 220, 211)

#End Region

#Region "Constructors"

'Shared EDButton()

'sizeBorderPixelIndent = New Size(4, 4)

'clrOuterShadow1 = Color.FromArgb(64, 164, 164, 164)

'clrOuterShadow2 = Color.FromArgb(64, Color.White)

'clrBackground1 = Color.FromArgb(250, 250, 248)

'clrBackground2 = Color.FromArgb(240, 240, 234)

'clrBorder = Color.FromArgb(0, 60, 116)

' clrInnerShadowBottom1 = Color.FromArgb(236, 235, 230)

'clrInnerShadowBottom2 = Color.FromArgb(226, 223, 214)

'clrInnerShadowBottom3 = Color.FromArgb(214, 208, 197)

'clrInnerShadowRight1a = Color.FromArgb(128, 236, 234, 230)

'clrInnerShadowRight1b = Color.FromArgb(128, 224, 220, 212)

'clrInnerShadowRight2a = Color.FromArgb(128, 234, 228, 218)

' clrInnerShadowRight2b = Color.FromArgb(128, 212, 208, 196)

' clrInnerShadowBottomPressed1 = Color.FromArgb(234, 233, 227)

'clrInnerShadowBottomPressed2 = Color.FromArgb(242, 241, 238)

'clrInnerShadowTopPressed1 = Color.FromArgb(209, 204, 193)

'clrInnerShadowTopPressed2 = Color.FromArgb(220, 216, 207)

' clrInnerShadowLeftPressed1 = Color.FromArgb(216, 213, 203)

'clrInnerShadowLeftPressed2 = Color.FromArgb(222, 220, 211)

'End Sub

#End Region

#Region "Properties"

Dim enmState As ControlState = ControlState.Normal

Dim bCanClick As Boolean = False

Dim m_btnStyle As emunType.XPStyle = emunType.XPStyle.Default1

Dim m_btnShape As emunType.BtnShape = emunType.BtnShape.Rectangle

Dim locPoint As Point

Public Shadows Property FlatStyle() As FlatStyle

Get

Return MyBase.FlatStyle

End Get

Set(ByVal Value As FlatStyle)

MyBase.FlatStyle = FlatStyle.Standard

End Set

End Property

Public Property BtnShape() As emunType.BtnShape

Get

Return m_btnShape

End Get

Set(ByVal Value As emunType.BtnShape)

m_btnShape = Value

MyBase.Invalidate()

End Set

End Property

<DefaultValue("Blue"), System.ComponentModel.RefreshProperties(RefreshProperties.Repaint)> _

Public Property BtnStyle() As emunType.XPStyle

Get

Return m_btnStyle

End Get

Set(ByVal Value As emunType.XPStyle)

m_btnStyle = Value

Me.Invalidate()

End Set

End Property

Public Property AdjustImageLocation() As Point

Get

Return locPoint

End Get

Set(ByVal Value As Point)

locPoint = Value

Me.Invalidate()

End Set

End Property

Private ReadOnly Property BorderRectangle() As Rectangle

Get

Dim rc As Rectangle = Me.ClientRectangle

Return New Rectangle(1, 1, rc.Width - 3, rc.Height - 3)

End Get

End Property

#End Region

#Region "Methods"

Protected Overloads Overrides Sub OnClick(ByVal ea As EventArgs)

Me.Capture = False

bCanClick = False

If Me.ClientRectangle.Contains(Me.PointToClient(Control.MousePosition)) Then

enmState = ControlState.Hover

Else

enmState = ControlState.Normal

End If

Me.Invalidate()

MyBase.OnClick(ea)

End Sub

Protected Overloads Overrides Sub OnMouseEnter(ByVal ea As EventArgs)

MyBase.OnMouseEnter(ea)

enmState = ControlState.Hover

Me.Invalidate()

End Sub

Protected Overloads Overrides Sub OnMouseDown(ByVal mea As MouseEventArgs)

MyBase.OnMouseDown(mea)

If mea.Button = MouseButtons.Left Then

bCanClick = True

enmState = ControlState.Pressed

Me.Invalidate()

End If

End Sub

Protected Overloads Overrides Sub OnMouseMove(ByVal mea As MouseEventArgs)

MyBase.OnMouseMove(mea)

If ClientRectangle.Contains(mea.X, mea.Y) Then

If enmState = ControlState.Hover AndAlso Me.Capture AndAlso Not bCanClick Then

bCanClick = True

enmState = ControlState.Pressed

Me.Invalidate()

End If

Else

If enmState = ControlState.Pressed Then

bCanClick = False

enmState = ControlState.Hover

Me.Invalidate()

End If

End If

End Sub

Protected Overloads Overrides Sub OnMouseLeave(ByVal ea As EventArgs)

MyBase.OnMouseLeave(ea)

enmState = ControlState.Normal

Me.Invalidate()

End Sub

Protected Overloads Overrides Sub OnPaint(ByVal pea As PaintEventArgs)

Me.OnPaintBackground(pea)

Select Case enmState

Case ControlState.Normal

If Me.Enabled Then

If Me.Focused OrElse Me.IsDefault Then

Select Case m_btnShape

Case emunType.BtnShape.Rectangle

OnDrawDefault(pea.Graphics)

' break

Case emunType.BtnShape.Ellipse

OnDrawDefaultEllipse(pea.Graphics)

' break

End Select

Else

Select Case m_btnShape

Case emunType.BtnShape.Rectangle

OnDrawNormal(pea.Graphics)

' break

Case emunType.BtnShape.Ellipse

OnDrawNormalEllipse(pea.Graphics)

' break

End Select

End If

Else

OnDrawDisabled(pea.Graphics)

End If

' break

Case ControlState.Hover

Select Case m_btnShape

Case emunType.BtnShape.Rectangle

OnDrawHover(pea.Graphics)

' break

Case emunType.BtnShape.Ellipse

OnDrawHoverEllipse(pea.Graphics)

' break

End Select

' break

Case ControlState.Pressed

Select Case m_btnShape

Case emunType.BtnShape.Rectangle

OnDrawPressed(pea.Graphics)

' break

Case emunType.BtnShape.Ellipse

OnDrawPressedEllipse(pea.Graphics)

' break

End Select

' break

End Select

OnDrawTextAndImage(pea.Graphics)

End Sub

Protected Overloads Overrides Sub OnEnabledChanged(ByVal ea As EventArgs)

MyBase.OnEnabledChanged(ea)

enmState = ControlState.Normal

Me.Invalidate()

End Sub

Private Sub OnDrawNormal(ByVal g As Graphics)

DrawNormalButton(g)

End Sub

Private Sub OnDrawHoverEllipse(ByVal g As Graphics)

DrawNormalEllipse(g)

DrawEllipseHoverBorder(g)

DrawEllipseBorder(g)

End Sub

Private Sub OnDrawHover(ByVal g As Graphics)

DrawNormalButton(g)

Dim rcBorder As Rectangle = Me.BorderRectangle

Dim penTop1 As Pen = New Pen(Color.FromArgb(255, 240, 207))

Dim penTop2 As Pen = New Pen(Color.FromArgb(253, 216, 137))

g.DrawLine(penTop1, rcBorder.Left + 2, rcBorder.Top + 1, rcBorder.Right - 2, rcBorder.Top + 1)

g.DrawLine(penTop2, rcBorder.Left + 1, rcBorder.Top + 2, rcBorder.Right - 1, rcBorder.Top + 2)

penTop1.Dispose()

penTop2.Dispose()

Dim penBottom1 As Pen = New Pen(Color.FromArgb(248, 178, 48))

Dim penBottom2 As Pen = New Pen(Color.FromArgb(229, 151, 0))

g.DrawLine(penBottom1, rcBorder.Left + 1, rcBorder.Bottom - 2, rcBorder.Right - 1, rcBorder.Bottom - 2)

g.DrawLine(penBottom2, rcBorder.Left + 2, rcBorder.Bottom - 1, rcBorder.Right - 2, rcBorder.Bottom - 1)

penBottom1.Dispose()

penBottom2.Dispose()

Dim rcLeft As Rectangle = New Rectangle(rcBorder.Left + 1, rcBorder.Top + 3, 2, rcBorder.Height - 5)

Dim rcRight As Rectangle = New Rectangle(rcBorder.Right - 2, rcBorder.Top + 3, 2, rcBorder.Height - 5)

Dim brushSide As LinearGradientBrush = New LinearGradientBrush(rcLeft, Color.FromArgb(254, 221, 149), Color.FromArgb(249, 180, 53), LinearGradientMode.Vertical)

g.FillRectangle(brushSide, rcLeft)

g.FillRectangle(brushSide, rcRight)

brushSide.Dispose()

End Sub

Private Sub OnDrawPressedEllipse(ByVal g As Graphics)

DrawPressedEllipse(g)

DrawEllipseBorder(g)

End Sub

Private Sub DrawPressedEllipse(ByVal g As Graphics)

Dim rcBorder As Rectangle = Me.BorderRectangle

Dim rcBackground As Rectangle = New Rectangle(rcBorder.X + 1, rcBorder.Y + 1, rcBorder.Width - 1, rcBorder.Height - 1)

Dim brushBackground As SolidBrush = New SolidBrush(Color.FromArgb(226, 225, 218))

g.FillEllipse(brushBackground, rcBackground)

End Sub

Private Sub OnDrawPressed(ByVal g As Graphics)

Dim rcBorder As Rectangle = Me.BorderRectangle

DrawOuterShadow(g)

Dim rcBackground As Rectangle = New Rectangle(rcBorder.X + 1, rcBorder.Y + 1, rcBorder.Width - 1, rcBorder.Height - 1)

Dim brushBackground As SolidBrush = New SolidBrush(Color.FromArgb(226, 225, 218))

g.FillRectangle(brushBackground, rcBackground)

brushBackground.Dispose()

DrawBorder(g)

Dim penInnerShadowBottomPressed1 As Pen = New Pen(clrInnerShadowBottomPressed1)

Dim penInnerShadowBottomPressed2 As Pen = New Pen(clrInnerShadowBottomPressed2)

g.DrawLine(penInnerShadowBottomPressed1, rcBorder.Left + 1, rcBorder.Bottom - 2, rcBorder.Right - 1, rcBorder.Bottom - 2)

g.DrawLine(penInnerShadowBottomPressed2, rcBorder.Left + 2, rcBorder.Bottom - 1, rcBorder.Right - 2, rcBorder.Bottom - 1)

penInnerShadowBottomPressed1.Dispose()

penInnerShadowBottomPressed2.Dispose()

Dim penInnerShadowTopPressed1 As Pen = New Pen(clrInnerShadowTopPressed1)

Dim penInnerShadowTopPressed2 As Pen = New Pen(clrInnerShadowTopPressed2)

g.DrawLine(penInnerShadowTopPressed1, rcBorder.Left + 2, rcBorder.Top + 1, rcBorder.Right - 2, rcBorder.Top + 1)

g.DrawLine(penInnerShadowTopPressed2, rcBorder.Left + 1, rcBorder.Top + 2, rcBorder.Right - 1, rcBorder.Top + 2)

penInnerShadowTopPressed1.Dispose()

penInnerShadowTopPressed2.Dispose()

Dim penInnerShadowLeftPressed1 As Pen = New Pen(clrInnerShadowLeftPressed1)

Dim penInnerShadowLeftPressed2 As Pen = New Pen(clrInnerShadowLeftPressed2)

g.DrawLine(penInnerShadowLeftPressed1, rcBorder.Left + 1, rcBorder.Top + 3, rcBorder.Left + 1, rcBorder.Bottom - 3)

g.DrawLine(penInnerShadowLeftPressed2, rcBorder.Left + 2, rcBorder.Top + 3, rcBorder.Left + 2, rcBorder.Bottom - 3)

penInnerShadowLeftPressed1.Dispose()

penInnerShadowLeftPressed2.Dispose()

End Sub

Private Sub OnDrawNormalEllipse(ByVal g As Graphics)

DrawNormalEllipse(g)

DrawEllipseBorder(g)

End Sub

Private Sub OnDrawDefaultEllipse(ByVal g As Graphics)

DrawNormalEllipse(g)

DrawEllipseDefaultBorder(g)

DrawEllipseBorder(g)

End Sub

Private Sub OnDrawDefault(ByVal g As Graphics)

DrawNormalButton(g)

Dim rcBorder As Rectangle = Me.BorderRectangle

Dim penTop1 As Pen = New Pen(Color.FromArgb(206, 231, 255))

Dim penTop2 As Pen = New Pen(Color.FromArgb(188, 212, 246))

g.DrawLine(penTop1, rcBorder.Left + 2, rcBorder.Top + 1, rcBorder.Right - 2, rcBorder.Top + 1)

g.DrawLine(penTop2, rcBorder.Left + 1, rcBorder.Top + 2, rcBorder.Right - 1, rcBorder.Top + 2)

penTop1.Dispose()

penTop2.Dispose()

Dim penBottom1 As Pen = New Pen(Color.FromArgb(137, 173, 228))

Dim penBottom2 As Pen = New Pen(Color.FromArgb(105, 130, 238))

g.DrawLine(penBottom1, rcBorder.Left + 1, rcBorder.Bottom - 2, rcBorder.Right - 1, rcBorder.Bottom - 2)

g.DrawLine(penBottom2, rcBorder.Left + 2, rcBorder.Bottom - 1, rcBorder.Right - 2, rcBorder.Bottom - 1)

penBottom1.Dispose()

penBottom2.Dispose()

Dim rcLeft As Rectangle = New Rectangle(rcBorder.Left + 1, rcBorder.Top + 3, 2, rcBorder.Height - 5)

Dim rcRight As Rectangle = New Rectangle(rcBorder.Right - 2, rcBorder.Top + 3, 2, rcBorder.Height - 5)

Dim brushSide As LinearGradientBrush = New LinearGradientBrush(rcLeft, Color.FromArgb(186, 211, 245), Color.FromArgb(137, 173, 228), LinearGradientMode.Vertical)

g.FillRectangle(brushSide, rcLeft)

g.FillRectangle(brushSide, rcRight)

brushSide.Dispose()

End Sub

Private Sub OnDrawDisabled(ByVal g As Graphics)

Dim rcBorder As Rectangle = Me.BorderRectangle

Dim rcBackground As Rectangle = New Rectangle(rcBorder.X + 1, rcBorder.Y + 1, rcBorder.Width - 1, rcBorder.Height - 1)

Dim brushBackground As SolidBrush = New SolidBrush(Color.FromArgb(245, 244, 234))

g.FillRectangle(brushBackground, rcBackground)

brushBackground.Dispose()

Dim penBorder As Pen = New Pen(Color.FromArgb(201, 199, 186))

ControlPaint.DrawRoundedRectangle(g, penBorder, rcBorder, sizeBorderPixelIndent)

penBorder.Dispose()

End Sub

Private Sub OnDrawTextAndImage(ByVal g As Graphics)

Dim brushText As SolidBrush

If Enabled Then

brushText = New SolidBrush(ForeColor)

Else

brushText = New SolidBrush(ControlPaint.DisabledForeColor)

End If

Dim sf As StringFormat = ControlPaint.GetStringFormat(Me.TextAlign)

sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.Show

If Not (Me.Image Is Nothing) Then

Dim rc As Rectangle = New Rectangle

Dim ImagePoint As Point = New Point(6, 4)

Select Case Me.ImageAlign

Case ContentAlignment.MiddleRight

rc.Width = Me.ClientRectangle.Width - Me.Image.Width - 8

rc.Height = Me.ClientRectangle.Height

rc.X = 0

rc.Y = 0

ImagePoint.X = rc.Width

ImagePoint.Y = Me.ClientRectangle.Height / 2 - Image.Height / 2

' break

Case ContentAlignment.TopCenter

ImagePoint.Y = 2

ImagePoint.X = (Me.ClientRectangle.Width - Me.Image.Width) / 2

rc.Width = Me.ClientRectangle.Width

rc.Height = Me.ClientRectangle.Height - Me.Image.Height - 4

rc.X = Me.ClientRectangle.X

rc.Y = Me.Image.Height

' break

Case ContentAlignment.MiddleCenter

ImagePoint.X = (Me.ClientRectangle.Width - Me.Image.Width) / 2

ImagePoint.Y = (Me.ClientRectangle.Height - Me.Image.Height) / 2

rc.Width = 0

rc.Height = 0

rc.X = Me.ClientRectangle.Width

rc.Y = Me.ClientRectangle.Height

' break

Case Else

ImagePoint.X = 6

ImagePoint.Y = Me.ClientRectangle.Height / 2 - Image.Height / 2

rc.Width = Me.ClientRectangle.Width - Me.Image.Width

rc.Height = Me.ClientRectangle.Height

rc.X = Me.Image.Width

rc.Y = 0

' break

End Select

ImagePoint.X += locPoint.X

ImagePoint.Y += locPoint.Y

If Me.Enabled Then

g.DrawImage(Me.Image, ImagePoint)

Else

System.Windows.Forms.ControlPaint.DrawImageDisabled(g, Me.Image, locPoint.X, locPoint.Y, Me.BackColor)

End If

If Not (ContentAlignment.MiddleCenter = Me.ImageAlign) Then

Dim rs As RectangleF

rs.X = rc.X

rs.Y = rc.Y

rs.Width = rc.Width

rs.Height = rc.Height

g.DrawString(Me.Text, Me.Font, brushText, rs, sf)

End If

Else

Dim rs As RectangleF

rs.X = Me.ClientRectangle.X

rs.Y = Me.ClientRectangle.Y

rs.Width = Me.ClientRectangle.Width

rs.Height = Me.ClientRectangle.Height

g.DrawString(Me.Text, Me.Font, brushText, rs, sf)

End If

brushText.Dispose()

sf.Dispose()

End Sub

Private Sub DrawNormalEllipse(ByVal g As Graphics)

Dim rcBackground As Rectangle = Me.BorderRectangle

Dim brushBackground As LinearGradientBrush = Nothing

Select Case m_btnStyle

Case emunType.XPStyle.Default1

brushBackground = New LinearGradientBrush(rcBackground, clrBackground1, clrBackground2, LinearGradientMode.Vertical)

' break

Case emunType.XPStyle.Blue

brushBackground = New LinearGradientBrush(rcBackground, Color.FromArgb(248, 252, 253), Color.FromArgb(172, 171, 201), LinearGradientMode.Vertical)

' break

Case emunType.XPStyle.OliveGreen

brushBackground = New LinearGradientBrush(rcBackground, Color.FromArgb(250, 250, 240), Color.FromArgb(235, 220, 190), LinearGradientMode.Vertical)

' break

Case emunType.XPStyle.Silver

brushBackground = New LinearGradientBrush(rcBackground, Color.FromArgb(253, 253, 253), Color.FromArgb(205, 205, 205), LinearGradientMode.Vertical)

' break

End Select

Dim relativeIntensities() As Single = {0, 0.008, 1}

Dim relativePositions() As Single = {0, 0.22, 1}

Dim blend As Blend = New Blend

blend.Factors = relativeIntensities

blend.Positions = relativePositions

brushBackground.Blend = blend

g.FillEllipse(brushBackground, rcBackground)

End Sub

Private Sub DrawNormalButton(ByVal g As Graphics)

Dim rcBorder As Rectangle = Me.BorderRectangle

DrawOuterShadow(g)

Dim rcBackground As Rectangle = New Rectangle(rcBorder.X + 1, rcBorder.Y + 1, rcBorder.Width - 1, rcBorder.Height - 1)

Dim brushBackground As LinearGradientBrush = Nothing

Select Case m_btnStyle

Case emunType.XPStyle.Default1

brushBackground = New LinearGradientBrush(rcBackground, clrBackground1, clrBackground2, LinearGradientMode.Vertical)

' break

Case emunType.XPStyle.Blue

brushBackground = New LinearGradientBrush(rcBackground, Color.FromArgb(248, 252, 253), Color.FromArgb(172, 171, 201), LinearGradientMode.Vertical)

' break

Case emunType.XPStyle.OliveGreen

brushBackground = New LinearGradientBrush(rcBackground, Color.FromArgb(250, 250, 240), Color.FromArgb(235, 220, 190), LinearGradientMode.Vertical)

' break

Case emunType.XPStyle.Silver

brushBackground = New LinearGradientBrush(rcBackground, Color.FromArgb(253, 253, 253), Color.FromArgb(205, 205, 205), LinearGradientMode.Vertical)

' break

End Select

Dim relativeIntensities() As Single = {0, 0.08, 1}

Dim relativePositions() As Single = {0, 0.32, 1}

Dim blend As Blend = New Blend

blend.Factors = relativeIntensities

blend.Positions = relativePositions

brushBackground.Blend = blend

g.FillRectangle(brushBackground, rcBackground)

brushBackground.Dispose()

DrawBorder(g)

If emunType.XPStyle.Default1 = m_btnStyle Then

Dim penInnerShadowBottom1 As Pen = New Pen(clrInnerShadowBottom1)

Dim penInnerShadowBottom2 As Pen = New Pen(clrInnerShadowBottom2)

Dim penInnerShadowBottom3 As Pen = New Pen(clrInnerShadowBottom3)

g.DrawLine(penInnerShadowBottom1, rcBorder.Left + 1, rcBorder.Bottom - 3, rcBorder.Right - 1, rcBorder.Bottom - 3)

g.DrawLine(penInnerShadowBottom2, rcBorder.Left + 1, rcBorder.Bottom - 2, rcBorder.Right - 1, rcBorder.Bottom - 2)

g.DrawLine(penInnerShadowBottom3, rcBorder.Left + 2, rcBorder.Bottom - 1, rcBorder.Right - 2, rcBorder.Bottom - 1)

penInnerShadowBottom1.Dispose()

penInnerShadowBottom2.Dispose()

penInnerShadowBottom3.Dispose()

Dim ptInnerShadowRight1a As Point = New Point(rcBorder.Right - 2, rcBorder.Top + 1)

Dim ptInnerShadowRight1b As Point = New Point(rcBorder.Right - 2, rcBorder.Bottom - 1)

Dim ptInnerShadowRight2a As Point = New Point(rcBorder.Right - 1, rcBorder.Top + 2)

Dim ptInnerShadowRight2b As Point = New Point(rcBorder.Right - 1, rcBorder.Bottom - 2)

Dim brushInnerShadowRight1 As LinearGradientBrush = New LinearGradientBrush(ptInnerShadowRight1a, ptInnerShadowRight1b, clrInnerShadowRight1a, clrInnerShadowRight1b)

Dim penInnerShadowRight1 As Pen = New Pen(brushInnerShadowRight1)

Dim brushInnerShadowRight2 As LinearGradientBrush = New LinearGradientBrush(ptInnerShadowRight2a, ptInnerShadowRight2b, clrInnerShadowRight2a, clrInnerShadowRight2b)

Dim penInnerShadowRight2 As Pen = New Pen(brushInnerShadowRight2)

g.DrawLine(penInnerShadowRight1, ptInnerShadowRight1a, ptInnerShadowRight1b)

g.DrawLine(penInnerShadowRight2, ptInnerShadowRight2a, ptInnerShadowRight2b)

penInnerShadowRight1.Dispose()

penInnerShadowRight2.Dispose()

brushInnerShadowRight1.Dispose()

brushInnerShadowRight2.Dispose()

Dim penTop As Pen = New Pen(Color.White)

g.DrawLine(penTop, rcBorder.Left + 2, rcBorder.Top + 1, rcBorder.Right - 2, rcBorder.Top + 1)

g.DrawLine(penTop, rcBorder.Left + 1, rcBorder.Top + 2, rcBorder.Right - 1, rcBorder.Top + 2)

g.DrawLine(penTop, rcBorder.Left + 1, rcBorder.Top + 3, rcBorder.Right - 1, rcBorder.Top + 3)

penTop.Dispose()

End If

End Sub

Private Sub DrawOuterShadow(ByVal g As Graphics)

Dim brushOuterShadow As LinearGradientBrush = New LinearGradientBrush(ClientRectangle, clrOuterShadow1, clrOuterShadow2, LinearGradientMode.Vertical)

g.FillRectangle(brushOuterShadow, ClientRectangle)

brushOuterShadow.Dispose()

End Sub

Private Sub DrawEllipseOuterShadow(ByVal g As Graphics)

Dim brushOuterShadow As LinearGradientBrush = New LinearGradientBrush(ClientRectangle, clrOuterShadow1, clrOuterShadow2, LinearGradientMode.Vertical)

g.FillRectangle(brushOuterShadow, ClientRectangle)

brushOuterShadow.Dispose()

End Sub

Private Sub DrawBorder(ByVal g As Graphics)

Dim penBorder As Pen = New Pen(clrBorder)

ControlPaint.DrawRoundedRectangle(g, penBorder, Me.BorderRectangle, sizeBorderPixelIndent)

penBorder.Dispose()

End Sub

Private Sub DrawEllipseBorder(ByVal g As Graphics)

Dim penBorder As Pen = New Pen(Color.FromArgb(0, 0, 0))

Dim oldSmoothingMode As SmoothingMode = g.SmoothingMode

g.SmoothingMode = SmoothingMode.AntiAlias

g.DrawEllipse(penBorder, Me.BorderRectangle)

g.SmoothingMode = oldSmoothingMode

penBorder.Dispose()

End Sub

Private Sub DrawEllipseDefaultBorder(ByVal g As Graphics)

Dim penTop2 As Pen = New Pen(Color.FromArgb(137, 173, 228), 2)

Dim rcInFrame As Rectangle = New Rectangle(Me.BorderRectangle.X + 2, Me.BorderRectangle.Y + 1, Me.BorderRectangle.Width - 4, Me.BorderRectangle.Height - 2)

Dim oldSmoothingMode As SmoothingMode = g.SmoothingMode

g.SmoothingMode = SmoothingMode.AntiAlias

g.DrawEllipse(penTop2, rcInFrame)

g.SmoothingMode = oldSmoothingMode

penTop2.Dispose()

End Sub

Private Sub DrawEllipseHoverBorder(ByVal g As Graphics)

Dim penTop2 As Pen = New Pen(Color.FromArgb(248, 178, 48), 2)

Dim rcInFrame As Rectangle = New Rectangle(Me.BorderRectangle.X + 2, Me.BorderRectangle.Y + 1, Me.BorderRectangle.Width - 4, Me.BorderRectangle.Height - 2)

Dim oldSmoothingMode As SmoothingMode = g.SmoothingMode

g.SmoothingMode = SmoothingMode.AntiAlias

g.DrawEllipse(penTop2, rcInFrame)

g.SmoothingMode = oldSmoothingMode

penTop2.Dispose()

End Sub

#End Region

End Class

End Namespace

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航