Copie de fenetres

Messages postés
8
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
13 décembre 2017
- - Dernière réponse : 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
Afficher la suite 

2 réponses

Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
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"
Commenter la réponse de Renfield
Messages postés
8
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
13 décembre 2017
0
Merci
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
Commenter la réponse de nHoffmann