Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: xmbeat en Enero 14, 2010, 04:44:22 pm
-
navegando por el API Guide me tope con la funcion PrintWindow que es para obtener en un hdc una ventana, se me ocurrio que podia usarla para un tipo de vista previa como el navegador Opera, lo que hago es crear un hdc y despues se lo paso a los argumentos en el evento MouseOver de un Control que hice asi :
PrintWindow PicArray(Index).Hwnd, HDC, 0 'picArray es un array de un Control Picture que quiero que se muestre en vista previa
despues el HDC le Aplico la Funcion StretchBlt para poder dimensionarla y ponerla en el HDC de un Formulario que es el que muestra la vista previa, el formulario lo Descargo en el Evento MouseOut del mismo control que hice,
pero en cuanto se produce otro evento MouseOver, el formulario de la vista previa se mira , pero la funcio PrintWindow deja de funcionar, aqui dejo el code si alguien puede ayudarme:
Private Sub ChkMenu_MouseOver(Index As Integer)
On Error Resume Next
Dim DC As Long
Dim hDC As Long
Dim hBmp As Long
unload FrmVistaPrevia
load FrmVistaPrevia
With FrmVistaPrevia
.Move Me.Left + ChkMenu(Index).Left * Screen.TwipsPerPixelX, _
Me.Top + (ChkMenu(Index).Top + ChkMenu(Index).Height) * Screen.TwipsPerPixelY
DC = GetDC(0)
hDC = CreateCompatibleDC(0)
hBmp = CreateCompatibleBitmap(DC, .Width, .Height)
Call SelectObject(hDC, hBmp)
Redondear .hwnd, .ScaleWidth + 1, .ScaleHeight + 1, 6 'este es para _
redondear el Form, no influye en nada
PrintWindow PicArray(Index).hwnd, hDC, 0
StretchBlt .hdc, 10, 10, .ScaleWidth - 20, .ScaleHeight - 20, _
hDC, 0, 0, PicArray(Index).Width, PicArray(Index).Height, vbSrcCopy
RoundRect .hdc, 10, 10, .ScaleWidth - 10, .ScaleHeight - 10, 0, 0
.forecolor = 0
RoundRect .hdc, 0, 0, .ScaleWidth, .ScaleHeight, 8, 8
.ForeColor = vbWhite
RoundRect .hdc, 0, 0, .ScaleWidth, .ScaleHeight, 7, 8
.Visible = True
End With
PicArray(Index).Refresh 'para que no se quede "Pegado"
End Sub
-
bueno nomas pa decir que ya lo arregle con DeleteDC y DeleteObject, ;D
;D y con un Refresh al DC del Formulario