⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linegs.cls

📁 一款另类的彩色图形复选框控件源代码(CheckBox2009) (v3)
💻 CLS
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "LineGS"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
Attribute VB_Ext_KEY = "Member0" ,"SmoothLineDIB"
'****************************************************************************
'人人为我,我为人人
'枕善居汉化收藏整理
'发布日期:2009/04/18
'描    述:彩色图形复选框(CheckBox2009) (v3)
'网    站:http://www.Mndsoft.com/  (VB6源码博客)
'网    站:http://www.VbDnet.com/   (VB.NET源码博客,主要基于.NET2005)
'e-mail  :Mndsoft@163.com
'e-mail  :Mndsoft@126.com
'OICQ    :88382850
'          如果您有新的好的代码别忘记给枕善居哦!
'****************************************************************************
'
Option Explicit

'Original TMT Pascal/Asm code by Jonas Widarsson
'
'Implemented in Vb6 by Dana Seaman
'Send comments/bug reports to dseaman@ieg.com.br
'
Public Enum cThickness
   Thin
   Thick
End Enum
Private Type RGBQUAD
   Blue                 As Byte
   Green                As Byte
   Red                  As Byte
   Reserved             As Byte
End Type

Private Type BITMAPINFOHEADER
   biSize               As Long
   biWidth              As Long
   biHeight             As Long
   biPlanes             As Integer
   biBitCount           As Integer
   biCompression        As Long
   biSizeImage          As Long
   biXPelsPerMeter      As Long
   biYPelsPerMeter      As Long
   biClrUsed            As Long
   biClrImportant       As Long
End Type

Private Type BITMAPINFO
   bmiHeader            As BITMAPINFOHEADER
End Type

Private Type RECT
   Left     As Long
   Top      As Long
   Right    As Long
   Bottom   As Long
End Type

Private Const DIB_RGB_COLORS As Long = 0
Private Const Pi        As Single = 3.141592
Private Const HalfPi    As Single = Pi / 2
Private Const cThin     As Single = Pi * 0.34
Private Const cThick    As Single = Pi * 0.17
Private Const Rads      As Single = Pi / 180
Private Const PS_SOLID  As Long = 0

Private Binfo           As BITMAPINFO
Private buf()           As RGBQUAD
Private InDIBits        As Boolean
Private Red             As Long
Private Green           As Long
Private Blue            As Long
Private m_Color         As Long
Private m_hDC           As Long
Private m_W1            As Long
Private m_H1            As Long
Private m_Handle        As Long

Private Declare Function Arc Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Private Declare Function OleTranslateColor Lib "OLEPRO32.DLL" (ByVal OLE_COLOR As Long, ByVal HPALETTE As Long, pccolorref As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Private Declare Function GetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long

'Public Sub Widget(rct As RECT)

'End Sub
Private Function TranslateColour(ByVal clr As OLE_COLOR, _
   Optional hPal As Long = 0) As Long
   If OleTranslateColor(clr, hPal, TranslateColour) Then
      TranslateColour = vbBlack 'CLR_INVALID
   End If
End Function

Public Sub DIB(ByVal hdc As Long, ByVal Handle As Long, ByVal W1 As Long, ByVal H1 As Long)
   m_hDC = hdc
   m_Handle = Handle
   m_W1 = W1
   m_H1 = H1
   Pic2Array
End Sub

Private Sub Pic2Array()
   ReDim buf(0 To (m_W1 - 1), m_H1 - 1) As RGBQUAD
   With Binfo.bmiHeader
      .biSize = 40
      .biWidth = m_W1
      .biHeight = -m_H1
      .biPlanes = 1
      .biBitCount = 32
      .biCompression = 0
      .biClrUsed = 0
      .biClrImportant = 0
      .biSizeImage = m_W1 * m_H1
   End With
   'Copy hDC to Array
   GetDIBits m_hDC, m_Handle, 0, m_H1, buf(0, 0), Binfo, DIB_RGB_COLORS
   'Set local flag
   InDIBits = True
End Sub

Public Sub CircleGP(ByVal hdc As Long, _
   ByVal X1 As Long, _
   ByVal Y1 As Long, _
   ByVal RadiusX As Long, _
   ByVal RadiusY As Long, _
   ByVal Color As OLE_COLOR, _
   Optional ByVal Thickness As cThickness = Thick)

   Dim Bbg              As Byte
   Dim Gbg              As Byte
   Dim Rbg              As Byte
   Dim savAlpha(1 To 4) As Byte
   Dim Bblend           As Long
   Dim Bgr              As Long
   Dim Cl               As Long
   Dim Gblend           As Long
   Dim Strength         As Long
   Dim StrengthI        As Long
   Dim Quadrant         As Long
   Dim Radius           As Long
   Dim Rblend           As Long
   Dim RX1              As Long
   Dim RX2              As Long
   Dim RY1              As Long
   Dim RY2              As Long
   Dim savX(1 To 4)     As Long
   Dim savY(1 To 4)     As Long
   Dim X4               As Long
   Dim Y4               As Long
   Dim NewColor         As Long
   Dim Ax               As Single
   Dim Ay               As Single
   Dim Bx               As Single
   Dim By               As Single
   Dim L1               As Single
   Dim L2               As Single
   Dim L3               As Single
   Dim L4               As Single
   Dim sngAngle         As Single
   Dim sngPointSpacing  As Single
   Dim X2               As Single
   Dim Xp5              As Single
   Dim Y2               As Single

   m_hDC = hdc

   SetRGBComponents Color

   Radius = RadiusX
   If RadiusY > RadiusX Then
      Radius = RadiusY
   End If

   sngPointSpacing = GetPointSpacing(Radius, Thickness)

   For sngAngle = 0 To HalfPi Step sngPointSpacing
      X2 = RadiusX * Cos(sngAngle)
      Y2 = RadiusY * Sin(sngAngle)
      'Prevents error when vb rounds .5 down
      If X2 = Int(X2) Then X2 = X2 + 0.001
      If Y2 = Int(Y2) Then Y2 = Y2 + 0.001
      For Quadrant = 0 To 3
         Select Case Quadrant
            Case 0 '0-90

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -