Hola a Todo el foro
Despues de varios meses de ausencia estoy por aqui otra vez

Estoy intentando hacer un control con fondo transparente
las propiedades del usercontrol son:
Autoredraw = True
BackStyle = Opaque
ControlContainer = True
ClipControls = True
Nota:
BackStyle = Transparent, no me sirve porque no puedo pintar en el en las zonas transparentes
y si le hago una mascara con maskpicture, no va bien para pintar con
GDI+ para el antialias
el codigo del control es el siguiente:
-------------------------------------------------------------------
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 Sub UserControl_Resize()
MakeUCTransparent
UserControl.Line (0, 0)-(100, 100), vbBlack
End Sub
Private Sub MakeUCTransparent()
Dim ctl As Control
Dim h1 As Long, h2 As Long
h1 = UserControl.Extender.Container.hDC
' get offsets for BitBlt.
Dim dL As Long: dL = UserControl.Extender.Left
Dim dT As Long: dT = UserControl.Extender.Top
Dim dW As Long: dW = UserControl.ScaleWidth
Dim dH As Long: dH = UserControl.ScaleHeight
' Copy background to our usercontrol hDC.
Call BitBlt(UserControl.hDC, 0, 0, dW, dH, h1, dL, dT, vbSrcCopy)
End Sub
-------------------------------------------------------------------
La cuestion es que cuando el primer UserControl en el Form va bien,
porque captura la imagen del Form y con
BitBlt la dibuja en el control,...
pero cuando dentro el primer UserControl quiero meter otro UserControl (el mismo que el primero)
me da
error 438 (El objeto no admite esta propiedad o método)He leido en algunos ejemplos que se podria hacer con la API
GetDC,
GetWindowDC o algunas mas, pero no funcionan bien.
Seguro que algun genio de los que hay por el foro, seguramente lo podra solucionar
Saludos y gracias a todos