Mascaras de transparencia P12
'Obtiene el tamaño de un ícono
Public Sub GetIconSize(hIcon As Long, Dx As Long, Dy As Long)
Dim ico As IconInfo, bmp As BITMAP
GetIconInfo hIcon, ico
GetBitmapInfo ico.hbmMask, Dx, Dy
Destroy ico.hbmColor, True
Destroy ico.hbmMask, True
End Sub
'Bitmap con máscara de transparencia
Public Function TransparentBltEX(ByVal hdcDest As Long, ByVal XDest As Long, ByVal YDest As Long, _
ByVal WidthDest As Long, ByVal HeightDest As Long, ByVal HdcSource As Long, ByVal XSource As Long, ByVal YSource As Long, _
ByVal WidthSource As Long, ByVal HeightSource As Long, ByVal TransColor As Long, ByVal ImitateWinNt4Win95 As Boolean) As Boolean
On Error Resume Next
Dim srcDC, SaveDC, maskDC, invDC, resultDC, bmp As BITMAP, hResultBmp, hSaveBmp, hMaskBmp, hInvBmp, hPrevBmp
Dim hSrcPrevBmp, hSavePrevBmp, hDestPrevBmp, hMaskPrevBmp, hInvPrevBmp, OrigColor, Success
Dim hSrcBmp, lResult As Long
Dim w, H, WD, HD
If ImitateWinNt4Win95 = False Then
SetStretchBltMode hdcDest, STRETCH_DELETESCANS
lResult = (TransparentBlt(hdcDest, XDest, YDest, WidthDest, HeightDest, HdcSource, XSource, YSource, WidthSource, HeightSource, TransColor) <> 0)
If lResult = 0 Then lResult = TransparentBltEX(hdcDest, XDest, YDest, WidthDest, HeightDest, HdcSource, XSource, YSource, WidthSource, HeightSource, TransColor, True)
TransparentBltEX = lResult
Else
'######################################
'Inicio de variables no iniciadas
'######################################
'Obtiene el tamaño del DC Origen
'W = GetDeviceCaps(hdcSource, 40)
'H = GetDeviceCaps(hdcSource, 42)
'Si algún ancho o alto es cero lo lleva a la medida del DC origen
'HeightSource = IIf(HeightSource = 0, H, HeightSource)
'WidthSource = IIf(WidthSource = 0, W, WidthSource)
'HeightDest = IIf(HeightDest = 0, H, HeightDest)
'WidthDest = IIf(WidthDest = 0, W, WidthDest)
WD = WidthDest + XDest
HD = HeightDest + YDest
'######################################
'Creación de Contextos de dispositivos (DCs)
'######################################
'Crea un DC que sirve de origen compatible con el destino
srcDC = CreateCompatibleDC(hdcDest)
'Guarda las características del DC destino y crea un DC compatible (funciona como BackUp)
SaveDC = CreateCompatibleDC(hdcDest)
'Crea un DC compatible para la máscara
maskDC = CreateCompatibleDC(hdcDest)
'Crea un Dc compatible para la imagen invertida
invDC = CreateCompatibleDC(hdcDest)
'Crea un DC compatible para componer la imagen (dispositivo de resultados
resultDC = CreateCompatibleDC(hdcDest)
'######################################
'Crea los mapas de bits necesarios
'######################################
'Crea un Bitmap compatible con el DC origen, del tamaño requerido en el destino
hSrcBmp = CreateCompatibleBitmap(HdcSource, WD, HD)
'Crea un mapa de bits monocromo para el Dc de máscara
hMaskBmp = CreateBitmap(WD, HD, 1, 1, ByVal 0&)
'Crea un mapa de bits monocromo para la imagen invertida
hInvBmp = CreateBitmap(WD, HD, 1, 1, ByVal 0&)
'Crea un mapa de bits color para el Dc donde se compone la imagen
hResultBmp = CreateCompatibleBitmap(hdcDest, WD, HD)
'Crea un mapa de bits color para el Dc de BackUp
hSaveBmp = CreateCompatibleBitmap(hdcDest, WD, HD)