|
||||
|
vbAccelerator - Contents of code file: frmAbout.frmThis file is part of the download VB5 CD Ripper, which is described in the article CD Ripping in VB Part 1. VERSION 5.00 Begin VB.Form frmAbout AutoRedraw = -1 'True BackColor = &H80000005& BorderStyle = 3 'Fixed Dialog Caption = "%Title%" ClientHeight = 4320 ClientLeft = 4815 ClientTop = 3105 ClientWidth = 6285 BeginProperty Font Name = "Tahoma" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Icon = "frmAbout.frx":0000 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 288 ScaleMode = 3 'Pixel ScaleWidth = 419 ShowInTaskbar = 0 'False StartUpPosition = 1 'CenterOwner Begin VB.Timer tmr Enabled = 0 'False Interval = 1 Left = 300 Top = 3720 End Begin VB.PictureBox picLogo BackColor = &H80000010& BorderStyle = 0 'None Height = 1035 Left = 1365 MouseIcon = "frmAbout.frx":000C MousePointer = 99 'Custom Picture = "frmAbout.frx":015E ScaleHeight = 1035 ScaleWidth = 4800 TabIndex = 7 Tag = "/index.html" ToolTipText = "Click to visit vbAccelerator.com - Advanced VB, C# and VB.NET source code." Top = 75 Width = 4800 End Begin VB.TextBox txtAcknowledgements ForeColor = &H80000015& Height = 1215 Left = 1380 Locked = -1 'True MultiLine = -1 'True ScrollBars = 2 'Vertical TabIndex = 4 Top = 2280 Width = 4815 End Begin VB.PictureBox picNothing AutoRedraw = -1 'True BackColor = &H80000010& BorderStyle = 0 'None Height = 1065 Left = 60 ScaleHeight = 71 ScaleMode = 3 'Pixel ScaleWidth = 408 TabIndex = 3 Top = 60 Width = 6120 Begin VB.Label lblLinkTo Alignment = 2 'Center BackStyle = 0 'Transparent Height = 255 Left = 1320 TabIndex = 8 Top = 810 Width = 4815 End End Begin VB.CommandButton cmdOK Caption = "OK" Height = 435 Left = 4860 TabIndex = 0 Top = 3660 Width = 1335 End Begin VB.PictureBox Picture1 BorderStyle = 0 'None Height = 1215 Left = 60 ScaleHeight = 1215 ScaleWidth = 6120 TabIndex = 5 Top = 60 Width = 6120 End Begin VB.Label lblVersion BackStyle = 0 'Transparent Caption = "%Version%" Height = 255 Left = 1380 TabIndex = 6 Top = 1980 Width = 4755 End Begin VB.Line Line1 BorderColor = &H80000010& X1 = 4 X2 = 412 Y1 = 240 Y2 = 240 End Begin VB.Label lblAppName BackStyle = 0 'Transparent Caption = "%AppName%" Height = 255 Left = 1380 TabIndex = 2 Top = 1320 Width = 4815 End Begin VB.Label lblCopyright BackStyle = 0 'Transparent Caption = "%Copyright%" Height = 495 Left = 1380 TabIndex = 1 Top = 3720 Width = 3435 End End Attribute VB_Name = "frmAbout" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private Type RECT left As Long top As Long right As Long bottom As Long End Type Private Type TRIVERTEX x As Long y As Long Red As Integer Green As Integer Blue As Integer Alpha As Integer End Type Private Type GRADIENT_RECT UpperLeft As Long LowerRight As Long End Type Private Type GRADIENT_TRIANGLE Vertex1 As Long Vertex2 As Long Vertex3 As Long End Type Private Declare Function GradientFill Lib "msimg32" ( _ ByVal hDC As Long, _ pVertex As TRIVERTEX, _ ByVal dwNumVertex As Long, _ pMesh As GRADIENT_RECT, _ ByVal dwNumMesh As Long, _ ByVal dwMode As Long) As Long Private Declare Function GradientFillTriangle Lib "msimg32" Alias "GradientFill" ( _ ByVal hDC As Long, _ pVertex As TRIVERTEX, _ ByVal dwNumVertex As Long, _ pMesh As GRADIENT_TRIANGLE, _ ByVal dwNumMesh As Long, _ ByVal dwMode As Long) As Long Private Const GRADIENT_FILL_RECT_H As Long = 0 Private Const GRADIENT_FILL_RECT_V As Long = 1 Private Const GRADIENT_FILL_TRIANGLE As Long = &H2 Private Declare Function OleTranslateColor Lib "OLEPRO32.DLL" (ByVal OLE_COLOR As Long, ByVal HPALETTE As Long, pccolorref As Long) As Long Private Const CLR_INVALID = -1 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Const SW_SHOWNORMAL = 1 Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long Private Const BITSPIXEL = 12 ' Number of bits per pixel Private Type OSVERSIONINFO dwVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion(0 To 127) As Byte End Type Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInfo As OSVERSIONINFO) As Long Private Const VER_PLATFORM_WIN32_NT = 2 Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function GetDesktopWindow Lib "user32" () 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 GetObjectAPI Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Declare Function CreateDIBSection Lib "gdi32" _ (ByVal hDC As Long, _ pBitmapInfo As BITMAPINFO, _ ByVal un As Long, _ lplpVoid As Long, _ ByVal handle As Long, _ ByVal dw As Long) As Long Private Type PictDesc cbSizeofStruct As Long picType As Long hImage As Long xExt As Long yExt As Long End Type Private Type GUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Declare Function OleCreatePictureIndirect Lib "OLEPRO32.DLL" ( _ lpPictDesc As PictDesc, _ riid As GUID, _ ByVal fPictureOwnsHandle As Long, _ ipic As IPicture _ ) As Long Private Type BITMAP bmType As Long bmWidth As Long bmHeight As Long bmWidthBytes As Long bmPlanes As Integer bmBitsPixel As Integer bmBits As Long End Type Private Const BI_RGB = 0& Private Const DIB_RGB_COLORS = 0 ' color table in RGBs Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _ lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long) Private Type SAFEARRAYBOUND cElements As Long lLbound As Long End Type Private Type SAFEARRAY2D cDims As Integer fFeatures As Integer cbElements As Long cLocks As Long pvData As Long Bounds(0 To 1) As SAFEARRAYBOUND End Type Private Declare Function VarPtrArray Lib "msvbvm50.dll" Alias "VarPtr" (Ptr() As Any) As Long Private Type RGBQUAD rgbBlue As Byte rgbGreen As Byte rgbRed As Byte rgbReserved As Byte End Type Private Type BITMAPINFOHEADER '40 bytes 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 bmiColors As RGBQUAD End Type Private Type BLENDFUNCTION BlendOp As Byte BlendFlags As Byte SourceConstantAlpha As Byte AlphaFormat As Byte End Type ' BlendOp: Private Const AC_SRC_OVER = &H0 ' AlphaFormat: Private Const AC_SRC_ALPHA = &H1 Private Declare Function AlphaBlend Lib "msimg32.dll" ( _ ByVal hdcDest As Long, _ ByVal nXOriginDest As Long, _ ByVal nYOriginDest As Long, _ ByVal nWidthDest As Long, _ ByVal nHeightDest As Long, _ ByVal hDcSrc As Long, _ ByVal nXOriginSrc As Long, _ ByVal nYOriginSrc As Long, _ ByVal nWidthSrc As Long, _ ByVal nHeightSrc As Long, _ ByVal lBlendFunction As Long _ ) As Long Private Declare Function SetTextColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long Private Declare Function SetBkMode Lib "gdi32" (ByVal hDC As Long, ByVal nBkMode As Long) As Long Private Const OPAQUE = 2 Private Const TRANSPARENT = 1 Private Declare Function DrawTextA Lib "user32" (ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long Private Declare Function DrawTextW Lib "user32" (ByVal hDC As Long, ByVal lpStr As Long, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long Private Const DT_LEFT = &H0& Private Const DT_TOP = &H0& Private Const DT_CENTER = &H1& Private Const DT_RIGHT = &H2& Private Const DT_VCENTER = &H4& Private Const DT_BOTTOM = &H8& Private Const DT_WORDBREAK = &H10& Private Const DT_SINGLELINE = &H20& Private Const DT_EXPANDTABS = &H40& Private Const DT_TABSTOP = &H80& Private Const DT_NOCLIP = &H100& Private Const DT_EXTERNALLEADING = &H200& Private Const DT_CALCRECT = &H400& Private Const DT_NOPREFIX = &H800 Private Const DT_INTERNAL = &H1000& Private Const DT_WORD_ELLIPSIS = &H40000 Private m_hDib(0 To 1) As Long Private m_hBmpOld(0 To 1) As Long Private m_hDC(0 To 1) As Long Private m_lPtr(0 To 1) As Long Private m_tBI(0 To 1) As BITMAPINFO Private m_lAlpha As Single Private m_sAppName As String Private m_sVersion As String Private m_sCopyright As String Private m_sCopyrightUrl As String Private m_sTitle As String Private m_sAcknowledgements As String Private m_bShowing As Boolean Private m_xDir() As Long Private m_yDir() As Long Private m_tOSV As OSVERSIONINFO Private Sub SetAsUrl(ctl As Control, ByVal sUrl As String) If (Len(sUrl) > 0) Then ctl.Tag = sUrl ctl.ForeColor = &H800000 ctl.FontUnderline = True ctl.MouseIcon = picLogo.MouseIcon ctl.MousePointer = 99 If (Len(ctl.ToolTipText) = 0) Then ctl.ToolTipText = "Go to " & sUrl End If Else If Len(ctl.Tag) > 0 Then If (ctl.ToolTipText = "Go to " & ctl.Tag) Then ctl.ToolTipText = "" End If ctl.Tag = "" End If ctl.ForeColor = vbWindowText ctl.FontUnderline = False ctl.MousePointer = vbDefault End If End Sub Private Sub UrlClick(ctl As Control) If Len(ctl.Tag) > 0 Then ShellExecute Me.hWnd, "open", ctl.Tag, "", "", SW_SHOWNORMAL End If End Sub Public Property Get Acknowledgements() As String Acknowledgements = m_sAcknowledgements End Property Public Property Let Acknowledgements(ByVal sAcknowledgements As String) m_sAcknowledgements = sAcknowledgements If (m_bShowing) Then txtAcknowledgements = m_sAcknowledgements End If End Property Public Property Get Title() As String Title = m_sTitle End Property Public Property Let Title(ByVal sTitle As String) m_sTitle = sTitle If (m_bShowing) Then Me.Caption = m_sTitle End If End Property Public Property Get Copyright() As String Copyright = m_sCopyright End Property Public Property Let Copyright(ByVal sCopyright As String) m_sCopyright = sCopyright If (m_bShowing) Then lblCopyright.Caption = m_sCopyright End If End Property Public Property Get CopyrightUrl() As String CopyrightUrl = m_sCopyrightUrl End Property Public Property Let CopyrightUrl(ByVal sCopyrightUrl As String) m_sCopyrightUrl = sCopyrightUrl If (m_bShowing) Then SetAsUrl lblCopyright, m_sCopyrightUrl End If End Property Public Property Get Version() As String Version = m_sVersion End Property Public Property Let Version(ByVal sVersion As String) m_sVersion = sVersion If (m_bShowing) Then lblVersion.Caption = sVersion End If End Property Public Property Get AppName() As String AppName = m_sAppName End Property Public Property Let AppName(ByVal sAppName As String) m_sAppName = sAppName If (m_bShowing) Then lblAppName.Caption = m_sAppName End If End Property Private Sub cmdOK_Click() Unload Me End Sub Private Sub Form_Load() m_tOSV.dwVersionInfoSize = Len(m_tOSV) GetVersionEx m_tOSV ' Defaults: If Len(m_sAppName) = 0 Then m_sAppName = App.FileDescription End If If Len(m_sTitle) = 0 Then m_sTitle = App.Title End If If Len(m_sCopyright) = 0 Then m_sCopyright = App.LegalCopyright End If If Len(m_sVersion) = 0 Then m_sVersion = "Version: " & App.Major & "." & App.Minor & "." & App.Revision End If If Len(m_sAcknowledgements) = 0 Then m_sAcknowledgements = App.Comments End If Me.Caption = m_sTitle lblAppName.Caption = m_sAppName lblCopyright.Caption = m_sCopyright SetAsUrl lblCopyright, m_sCopyrightUrl lblVersion.Caption = m_sVersion txtAcknowledgements.Text = m_sAcknowledgements If Me.Icon.handle = 0 Then Dim frm As Form For Each frm In Forms If (frm.BorderStyle = 2) Then Me.Icon = frm.Icon Exit For End If Next End If m_bShowing = True End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) ClearUp 1 ClearUp 0 End Sub Private Sub Form_Resize() If (m_tOSV.dwMajorVersion > 4) Or _ (m_tOSV.dwMajorVersion = 4) And (m_tOSV.dwMinorVersion >= 10) Then If (GetDeviceCaps(Me.hDC, BITSPIXEL) > 8) Then Me.Cls Dim tR As RECT tR.left = 0 tR.top = 0 tR.right = Me.ScaleWidth tR.bottom = Me.ScaleHeight GradientFillTri Me.hDC, tR, _ BlendColor(vb3DHighlight, vbButtonFace), vbButtonFace, _ vbButtonFace, BlendColor(vbButtonFace, vbButtonShadow, 224) Me.Refresh End If End If End Sub Private Sub lblCopyright_Click() UrlClick lblCopyright End Sub Private Sub lblLinkTo_Click() UrlClick lblLinkTo End Sub Private Sub picLogo_Click() UrlClick picLogo End Sub Private Sub GradientFillTri( _ ByVal lHDC As Long, _ tR As RECT, _ ByVal topLeftColor As OLE_COLOR, _ ByVal topRightColor As OLE_COLOR, _ ByVal bottomLeftColor As OLE_COLOR, _ ByVal bottomRightColor As OLE_COLOR _ ) Dim hBrush As Long Dim lTopLeftColor As Long Dim lTopRightColor As Long Dim lBottomLeftColor As Long Dim lBottomRightColor As Long Dim lR As Long ' Use GradientFill: OleTranslateColor topLeftColor, 0, lTopLeftColor OleTranslateColor topRightColor, 0, lTopRightColor OleTranslateColor bottomLeftColor, 0, lBottomLeftColor OleTranslateColor bottomRightColor, 0, lBottomRightColor Dim tTV(0 To 3) As TRIVERTEX Dim tGR(0 To 1) As GRADIENT_TRIANGLE setTriVertexColor tTV(0), lTopLeftColor tTV(0).x = tR.left tTV(0).y = tR.top setTriVertexColor tTV(1), lTopRightColor tTV(1).x = tR.right tTV(1).y = tR.top setTriVertexColor tTV(2), lBottomRightColor tTV(2).x = tR.right tTV(2).y = tR.bottom setTriVertexColor tTV(3), lBottomLeftColor tTV(3).x = tR.left tTV(3).y = tR.bottom tGR(0).Vertex1 = 0 tGR(0).Vertex2 = 1 tGR(0).Vertex3 = 2 tGR(1).Vertex1 = 0 tGR(1).Vertex2 = 2 tGR(1).Vertex3 = 3 GradientFillTriangle lHDC, tTV(0), 4, tGR(0), 2, GRADIENT_FILL_TRIANGLE End Sub Private Sub setTriVertexColor(tTV As TRIVERTEX, lColor As Long) Dim lRed As Long Dim lGreen As Long Dim lBlue As Long lRed = (lColor And &HFF&) * &H100& lGreen = (lColor And &HFF00&) lBlue = (lColor And &HFF0000) \ &H100& setTriVertexColorComponent tTV.Red, lRed setTriVertexColorComponent tTV.Green, lGreen setTriVertexColorComponent tTV.Blue, lBlue End Sub Private Sub setTriVertexColorComponent(ByRef iColor As Integer, ByVal lComponent As Long) If (lComponent And &H8000&) = &H8000& Then iColor = (lComponent And &H7F00&) iColor = iColor Or &H8000 Else iColor = lComponent End If End Sub Private Sub picNothing_Click() If (GetDeviceCaps(Me.hDC, BITSPIXEL) > 8) Then If Not (tmr.Enabled) Then CreateFromHBitmap 0, picLogo.Picture.handle Create 1, m_tBI(0).bmiHeader.biWidth, m_tBI(0).bmiHeader.biHeight LoadPictureBlt 1, m_hDC(0) picLogo.Visible = False m_lAlpha = 255 tmr_Timer tmr.Enabled = True Else picLogo.Visible = True tmr.Enabled = False End If End If End Sub Private Sub tmr_Timer() Dim tSAIn As SAFEARRAY2D Dim bDibIn() As Byte Dim tSAOut As SAFEARRAY2D Dim bDibOut() As Byte Static lIndexFrom As Long Static lIndexTo As Long Dim xEnd As Long, yEnd As Long Dim x As Long, y As Long, y2 As Long, x2 As Long lIndexFrom = lIndexTo If (lIndexFrom = 1) Then lIndexTo = 0 Else lIndexTo = 1 End If ' ' Get the bits in the from DIB section: With tSAIn .cbElements = 1 .cDims = 2 .Bounds(0).lLbound = 0 .Bounds(0).cElements = m_tBI(lIndexFrom).bmiHeader.biHeight .Bounds(1).lLbound = 0 .Bounds(1).cElements = 4 * m_tBI(lIndexFrom).bmiHeader.biWidth .pvData = m_lPtr(lIndexFrom) End With CopyMemory ByVal VarPtrArray(bDibIn()), VarPtr(tSAIn), 4 With tSAOut .cbElements = 1 .cDims = 2 .Bounds(0).lLbound = 0 .Bounds(0).cElements = m_tBI(lIndexTo).bmiHeader.biHeight .Bounds(1).lLbound = 0 .Bounds(1).cElements = 4 * m_tBI(lIndexTo).bmiHeader.biWidth .pvData = m_lPtr(lIndexTo) End With CopyMemory ByVal VarPtrArray(bDibOut()), VarPtr(tSAOut), 4 xEnd = tSAIn.Bounds(1).cElements - 4 yEnd = tSAIn.Bounds(0).cElements - 1 For y = yEnd To 0 Step -1 For x = 0 To xEnd Step 4 y2 = y + (Rnd * 4) - 2 If (y2 < 0) Then y2 = yEnd + y2 End If If (y2 > yEnd) Then y2 = y2 - yEnd - 1 End If x2 = x + Int(Rnd * 4) * 4 - 64 If (x2 < 0) Then x2 = xEnd + x2 End If If (x2 > xEnd) Then x2 = x2 - xEnd - 4 End If bDibOut(x, y) = (14& * bDibIn(x, y)) \ 16& + (1& * bDibIn(x2, y2) \ 16&) + 16& bDibOut(x + 1, y) = (14& * bDibIn(x + 1, y)) \ 16& + (1& * bDibIn(x2 + 1, y2) \ 16&) + 16& bDibOut(x + 2, y) = (14& * bDibIn(x + 2, y)) \ 16& + (1& * bDibIn(x2 + 2, y2) \ 16&) + 16& Next x Next y ' Clear the temporary array descriptor CopyMemory ByVal VarPtrArray(bDibIn), 0&, 4 CopyMemory ByVal VarPtrArray(bDibOut), 0&, 4 picNothing.Cls Dim lTextAlpha As Long Dim tR As RECT tR.left = 87 tR.right = 87 + m_tBI(0).bmiHeader.biWidth tR.top = 1 tR.bottom = 1 + m_tBI(0).bmiHeader.biHeight lTextAlpha = m_lAlpha + 128 If (lTextAlpha <= 255) Then SetBkMode picNothing.hDC, TRANSPARENT SetTextColor picNothing.hDC, BlendColor(vbButtonShadow, vb3DHighlight, lTextAlpha) DrawText picNothing.hDC, "vbAccelerator is a site providing advanced, free source code for VB, C# and VB.NET programmers. Specialities are controls, user interface and imaging. Everything is free and comes complete with full source code.", tR, DT_CENTER Or DT_VCENTER Or DT_WORDBREAK If (lTextAlpha < 64) And (lblLinkTo.Tag = "") Then lblLinkTo.Caption = "/index.html" SetAsUrl lblLinkTo, "/index.html" lblLinkTo.ForeColor = BlendColor(vbButtonShadow, vb3DHighlight, lTextAlpha) End If End If If (m_lAlpha > 0) Then Dim lBlend As Long Dim bf As BLENDFUNCTION bf.BlendOp = AC_SRC_OVER bf.BlendFlags = 0 bf.SourceConstantAlpha = m_lAlpha bf.AlphaFormat = 0 CopyMemory lBlend, bf, 4 AlphaBlend picNothing.hDC, _ 87, 1, m_tBI(0).bmiHeader.biWidth, m_tBI(0).bmiHeader.biHeight, _ m_hDC(lIndexTo), _ 0, 0, m_tBI(0).bmiHeader.biWidth, m_tBI(0).bmiHeader.biHeight, _ lBlend End If m_lAlpha = m_lAlpha - 4 If (m_lAlpha < -128) Then tmr.Enabled = False End If picNothing.Refresh ' End Sub Private Function CreateFromHBitmap( _ ByVal lIndex As Long, _ ByVal hBmp As Long _ ) Dim lHDC As Long Dim lhWnd As Long Dim lhDCDesktop As Long Dim lhBmpOld As Long Dim tBmp As BITMAP GetObjectAPI hBmp, Len(tBmp), tBmp If (Create(lIndex, tBmp.bmWidth, tBmp.bmHeight)) Then lhWnd = GetDesktopWindow() lhDCDesktop = GetDC(lhWnd) If (lhDCDesktop <> 0) Then lHDC = CreateCompatibleDC(lhDCDesktop) ReleaseDC lhWnd, lhDCDesktop ' 2003-07-05: Corrected for GDI leak in Win98 If (lHDC <> 0) Then lhBmpOld = SelectObject(lHDC, hBmp) LoadPictureBlt lIndex, lHDC SelectObject lHDC, lhBmpOld DeleteDC lHDC End If End If End If End Function Private Function Create( _ ByVal lIndex As Long, _ ByVal lWidth As Long, _ ByVal lHeight As Long _ ) As Boolean ClearUp lIndex m_hDC(lIndex) = CreateCompatibleDC(Me.hDC) If (m_hDC(lIndex) <> 0) Then If (CreateDIB(lIndex, m_hDC(lIndex), lWidth, lHeight, m_hDib(lIndex))) Then m_hBmpOld(lIndex) = SelectObject(m_hDC(lIndex), m_hDib(lIndex)) Create = True Else DeleteDC m_hDC(lIndex) m_hDC(lIndex) = 0 End If End If End Function Private Sub LoadPictureBlt( _ ByVal lIndex As Long, _ ByVal lHDC As Long, _ Optional ByVal lSrcLeft As Long = 0, _ Optional ByVal lSrcTop As Long = 0, _ Optional ByVal lSrcWidth As Long = -1, _ Optional ByVal lSrcHeight As Long = -1, _ Optional ByVal eRop As RasterOpConstants = vbSrcCopy _ ) If lSrcWidth < 0 Then lSrcWidth = m_tBI(lIndex).bmiHeader.biWidth If lSrcHeight < 0 Then lSrcHeight = m_tBI(lIndex).bmiHeader.biHeight BitBlt m_hDC(lIndex), 0, 0, lSrcWidth, lSrcHeight, lHDC, lSrcLeft, lSrcTop, eRop End Sub Private Sub ClearUp(ByVal lIndex As Long) If (m_hDC(lIndex) <> 0) Then If (m_hDib(lIndex) <> 0) Then SelectObject m_hDC(lIndex), m_hBmpOld(lIndex) DeleteObject m_hDib(lIndex) End If DeleteObject m_hDC(lIndex) End If m_hDC(lIndex) = 0: m_hDib(lIndex) = 0: m_hBmpOld(lIndex) = 0: m_lPtr(lIndex) = 0 End Sub Private Function CreateDIB( _ ByVal lIndex As Long, _ ByVal lHDC As Long, _ ByVal lWidth As Long, _ ByVal lHeight As Long, _ ByRef hDib As Long _ ) As Boolean With m_tBI(lIndex).bmiHeader .biSize = Len(m_tBI(lIndex).bmiHeader) .biWidth = lWidth .biHeight = lHeight .biPlanes = 1 .biBitCount = 32 .biCompression = BI_RGB .biSizeImage = lWidth * 4 * lHeight End With hDib = CreateDIBSection( _ lHDC, _ m_tBI(lIndex), _ DIB_RGB_COLORS, _ m_lPtr(lIndex), _ 0, 0) CreateDIB = (hDib <> 0) End Function Private Property Get BlendColor( _ ByVal oColorFrom As OLE_COLOR, _ ByVal oColorTo As OLE_COLOR, _ Optional ByVal Alpha As Long = 128 _ ) As Long Dim lCFrom As Long Dim lCTo As Long OleTranslateColor oColorFrom, 0, lCFrom OleTranslateColor oColorTo, 0, lCTo Dim lSrcR As Long Dim lSrcG As Long Dim lSrcB As Long Dim lDstR As Long Dim lDstG As Long Dim lDstB As Long lSrcR = lCFrom And &HFF lSrcG = (lCFrom And &HFF00&) \ &H100& lSrcB = (lCFrom And &HFF0000) \ &H10000 lDstR = lCTo And &HFF lDstG = (lCTo And &HFF00&) \ &H100& lDstB = (lCTo And &HFF0000) \ &H10000 BlendColor = RGB( _ ((lSrcR * Alpha) / 255) + ((lDstR * (255 - Alpha)) / 255), _ ((lSrcG * Alpha) / 255) + ((lDstG * (255 - Alpha)) / 255), _ ((lSrcB * Alpha) / 255) + ((lDstB * (255 - Alpha)) / 255) _ ) End Property Private Function DrawText(ByVal hDC As Long, ByVal sText As String, rc As RECT, ByVal lFlags As Long) Dim lPtr As Long If (m_tOSV.dwPlatformId = VER_PLATFORM_WIN32_NT) Then lPtr = StrPtr(sText) If Not (lPtr = 0) Then DrawTextW hDC, ByVal lPtr, -1, rc, lFlags End If Else DrawTextA hDC, sText, -1, rc, lFlags End If End Function
|
|||
|