home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 7_2009-2012.ISO / data / zips / ArtDraw_v_2180655102010.psc / Class / cDIBTile.cls < prev    next >
Text File  |  2009-04-13  |  6KB  |  180 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cDIBTile"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. '// -------------------
  15. '// Class : cDIBTile
  16. '// Author: Carles P.V.
  17. '// -------------------
  18. '// Date Cr: 10.11.2002
  19. '// Last Md: 08.02.2003
  20. '// -------------------
  21.  
  22.  
  23. Option Explicit
  24.  
  25. Private Type BITMAPINFOHEADER
  26.     biSize          As Long
  27.     biWidth         As Long
  28.     biHeight        As Long
  29.     biPlanes        As Integer
  30.     biBitCount      As Integer
  31.     biCompression   As Long
  32.     biSizeImage     As Long
  33.     biXPelsPerMeter As Long
  34.     biYPelsPerMeter As Long
  35.     biClrUsed       As Long
  36.     biClrImportant  As Long
  37. End Type
  38.  
  39. Private Type BITMAP
  40.     bmType       As Long
  41.     bmWidth      As Long
  42.     bmHeight     As Long
  43.     bmWidthBytes As Long
  44.     bmPlanes     As Integer
  45.     bmBitsPixel  As Integer
  46.     bmBits       As Long
  47. End Type
  48.  
  49. Private Type RECT2
  50.     x1 As Long
  51.     y1 As Long
  52.     x2 As Long
  53.     y2 As Long
  54. End Type
  55.  
  56. Private Type POINTAPI
  57.     x As Long
  58.     y As Long
  59. End Type
  60.  
  61. Private Const DIB_RGB_COLORS As Long = 0
  62. Private Const OBJ_BITMAP     As Long = 7
  63.  
  64. Private Declare Function CreateDIBPatternBrushPt Lib "gdi32" (lpPackedDIB As Any, ByVal iUsage As Long) As Long
  65. Private Declare Function SetBrushOrgEx Lib "gdi32" (ByVal hdc As Long, ByVal nXOrg As Long, ByVal nYOrg As Long, lppt As POINTAPI) As Long
  66. Private Declare Function GetObjectType Lib "gdi32" (ByVal hgdiobj As Long) As Long
  67. Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
  68. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  69. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  70. Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
  71. Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
  72. Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFOHEADER, ByVal wUsage As Long) As Long
  73. Private Declare Function SetRect Lib "user32" (lpRect As RECT2, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
  74. Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT2, ByVal hBrush As Long) As Long
  75. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
  76.  
  77. '//
  78.  
  79. Public m_hBrush As Long '* Pattern brush
  80.  
  81. '//
  82.  
  83. Private Sub Class_Initialize()
  84.     m_hBrush = 0
  85. End Sub
  86.  
  87. Public Function SetPattern(Picture As StdPicture) As Boolean
  88.  
  89.   Dim tBI       As BITMAP
  90.   Dim tBIH      As BITMAPINFOHEADER
  91.   Dim Buff()    As Byte 'Packed DIB
  92.     
  93.   Dim lhDC      As Long
  94.   Dim lhOldBmp  As Long
  95.     
  96.     If (GetObjectType(Picture) = OBJ_BITMAP) Then
  97.     
  98.         '-- Get image info
  99.         GetObject Picture, Len(tBI), tBI
  100.         
  101.         '-- Prepare DIB header and redim. Buff() array
  102.         With tBIH
  103.             .biSize = Len(tBIH) '40
  104.             .biPlanes = 1
  105.             .biBitCount = 24
  106.             .biWidth = tBI.bmWidth
  107.             .biHeight = tBI.bmHeight
  108.             .biSizeImage = ((.biWidth * 3 + 3) And &HFFFFFFFC) * .biHeight
  109.         End With
  110.         ReDim Buff(1 To Len(tBIH) + tBIH.biSizeImage) '[Header + Bits]
  111.             
  112.         '-- Create DIB brush
  113.         lhDC = CreateCompatibleDC(0)
  114.         If (lhDC <> 0) Then
  115.             lhOldBmp = SelectObject(lhDC, Picture)
  116.                     
  117.             '-- Build packed DIB:
  118.             '   - Merge Header
  119.                 CopyMemory Buff(1), tBIH, Len(tBIH)
  120.             '   - Get and merge DIB Bits
  121.                 GetDIBits lhDC, Picture, 0, tBI.bmHeight, Buff(Len(tBIH) + 1), tBIH, DIB_RGB_COLORS
  122.             
  123.             SelectObject lhDC, lhOldBmp
  124.             DeleteDC lhDC
  125.             
  126.             '-- Create brush from packed DIB
  127.             DestroyPattern
  128.             m_hBrush = CreateDIBPatternBrushPt(Buff(1), DIB_RGB_COLORS)
  129.         End If
  130.       Else
  131.         Debug.Print "> Picture is empty"
  132.     End If
  133.     
  134.     SetPattern = (m_hBrush <> 0)
  135. End Function
  136.  
  137. Public Sub Tile(ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long)
  138.  
  139.   Dim TileRect As RECT2
  140.   Dim PtOrg    As POINTAPI
  141.   
  142.     If (m_hBrush <> 0) Then
  143.         SetRect TileRect, x1, y1, x2, y2
  144.         SetBrushOrgEx hdc, x1, y1, PtOrg
  145.         '-- Tile image
  146.         FillRect hdc, TileRect, m_hBrush
  147.       Else
  148.         Debug.Print "> Pattern brush has not been initialized"
  149.     End If
  150. End Sub
  151.  
  152. Public Sub SetBrush(ByVal hdc As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long)
  153.  
  154.   Dim TileRect As RECT2
  155.   Dim PtOrg    As POINTAPI
  156.   
  157.     If (m_hBrush <> 0) Then
  158.         SetRect TileRect, x1, y1, x2, y2
  159.         SetBrushOrgEx hdc, x1, y1, PtOrg
  160.         '-- Tile image
  161.        FillRect hdc, TileRect, m_hBrush
  162.       Else
  163.         Debug.Print "> Pattern brush has not been initialized"
  164.     End If
  165. End Sub
  166.  
  167.  
  168. Public Sub DestroyPattern()
  169.     If (m_hBrush <> 0) Then
  170.         DeleteObject m_hBrush
  171.         m_hBrush = 0
  172.     End If
  173. End Sub
  174.  
  175. '//
  176.  
  177. Private Sub Class_Terminate()
  178.     DestroyPattern
  179. End Sub
  180.