VB中渐变的实现

'// clsGradient.cls

Option Explicit

Private Const PI    As Double = 3.14159265358979
Private Const RADS  As Double = PI / 180    '<Degrees> * RADS = radians

'// Internal Point structure.Uses Singles for more precision.
Private Type PointSng
        x   As Single
        y   As Single
End Type

Private Type POINT
        x   As Long
        y   As Long
End Type
Private Type RECT
        Left    As Long
        Top     As Long
        Right   As Long
        Bottom  As Long
End Type

'// CreatePen API nPenStyle parameter constant
Private Const PS_SOLID As Long = 0
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINT) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hDC As Long, lpRect As RECT, ByVal hBrush As Long) As Long

'// 渐变一
Public Sub DrawGradient1(ByVal hDC As Long, ByVal lWidth As Long, ByVal lHeight As Long, _
                         ByVal lStartColour As Long, ByVal lEndColour As Long, ByVal bVertical As Boolean)
    Dim lStep As Long
    Dim lPos As Long, lSize As Long
    Dim bRGB(1 To 3) As Integer
    Dim bRGBStart(1 To 3) As Integer
    Dim dR(1 To 3) As Double
    Dim dPos As Double, d As Double
    Dim hBr As Long
    Dim tR As RECT
   
    tR.Left = 0
    tR.Top = 0
    tR.Right = lWidth
    tR.Bottom = lHeight
   
    If bVertical Then
       lSize = (tR.Bottom - tR.Top)
    Else
       lSize = (tR.Right - tR.Left)
    End If
    lStep = lSize / 255
    If (lStep < 3) Then
       lStep = 3
    End If
      
    bRGB(1) = lStartColour And &HFF&
    bRGB(2) = (lStartColour And &HFF00&) / &H100&
    bRGB(3) = (lStartColour And &HFF0000) / &H10000
    bRGBStart(1) = bRGB(1): bRGBStart(2) = bRGB(2): bRGBStart(3) = bRGB(3)
    dR(1) = (lEndColour And &HFF&) - bRGB(1)
    dR(2) = ((lEndColour And &HFF00&) / &H100&) - bRGB(2)
    dR(3) = ((lEndColour And &HFF0000) / &H10000) - bRGB(3)
       
    For lPos = lSize To 0 Step -lStep
        '// Draw bar:
        If bVertical Then
           tR.Top = tR.Bottom - lStep
        Else
           tR.Left = tR.Right - lStep
        End If
        'Debug.Print tR.Right,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值