Copie de fenetres

nHoffmann Messages postés 8 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 13 décembre 2017 - 6 mai 2009 à 14:44
nHoffmann Messages postés 8 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 13 décembre 2017 - 7 mai 2009 à 11:00
Bonjour à tous,


Mon problème est le suivant :



  Sub Capture(Picture1 As PictureBox, Nom As String, hwndFenetre  As Long)
     Dim RECT As RECT
     Call SetForegroundWindow(hwndFenetre)
     Call GetWindowRect(hwndFenetre, RECT)
     hdc = GetDC(hwndFenetre)
     Call BitBlt(Picture1.hdc, 0, 0, RECT.Right - RECT.Left, RECT.Bottom - RECT.Top, hdc, -8, -28, vbSrcCopy)
     Picture1.Refresh
  End Sub



Ce code marche bien mais je suis aussi obligé de mettre systématiquement la fenetre a capturer au premier plan via l'instruction
 Call SetForegroundWindow(hwndFenetre) 
Si je ne n'utilise pas l'instruction SetForegroundWindow et que la fenetre à capturer est en partie masquée, la capture réalisée comprend la fenetre de premier plan.


Qui peut m'aider à m'affranchir de cette contrainte ?


Merci


Norbert

2 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 mai 2009 à 08:18
vivent les fuites mémoires...

tu crées des DC (via GetDC)
mais ne les libère pas (via ReleaseDC)
du coup, la mémoire consommée grimpe, grimpe...

-8 et -28, c'est pour quoi ?

demande a la fenetre concernée de dessiner son contenu chez toi.
voir WM_PRINT ou WM_PRINTCLIENT

http://msdn.microsoft.com/en-us/library/dd145216(VS.85).aspx

"The WM_PRINTCLIENT message is sent to a window to request that it draw its client area in the specified device context"
0
nHoffmann Messages postés 8 Date d'inscription samedi 19 mars 2005 Statut Membre Dernière intervention 13 décembre 2017
7 mai 2009 à 11:00
Merci pour ta réponse Renfield.
J'avais fait une extraction de code ( d'ou les -8 et -28) et je n'avais pas reporté le ReleaseDC
Le probleme ne venais pas de là.
C'est juste que GETDC capture l'a portion d'ecran.
 J'utilise maintenant GetWindowDC  et le probleme est desormais résolu. 

Nolrbert
0
Rejoignez-nous