Autor Tema: Problema con PrintWindow  (Leído 2632 veces)

0 Usuarios y 1 Visitante están viendo este tema.

xmbeat

  • Kilobyte
  • **
  • Mensajes: 84
  • Reputación: +3/-1
  • la vida no tiene sentido sin Dios
    • Ver Perfil
Problema con PrintWindow
« 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:

Código: [Seleccionar]

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



« última modificación: Enero 14, 2010, 05:10:59 pm por xmbeat »
El hombre encuentra a Dios detrás de cada puerta que la ciencia logra abrir. -Einstein

xmbeat

  • Kilobyte
  • **
  • Mensajes: 84
  • Reputación: +3/-1
  • la vida no tiene sentido sin Dios
    • Ver Perfil
Re:Problema con PrintWindow
« Respuesta #1 en: Enero 15, 2010, 02:10:25 pm »
bueno nomas pa decir que ya lo arregle con DeleteDC y DeleteObject,  ;D
;D y con un Refresh al DC del Formulario
El hombre encuentra a Dios detrás de cada puerta que la ciencia logra abrir. -Einstein