Pb pour recuperer un hDC valide

cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011 - 13 févr. 2005 à 16:32
bidoch78 Messages postés 67 Date d'inscription mercredi 27 février 2002 Statut Membre Dernière intervention 2 décembre 2005 - 15 févr. 2005 à 09:22
Salut a tous,

Je cherche une API qui serais capable de me donner
exactement l'equivalent de ceci : objet.hDC ou objet peu etre une form, une
picture..... en utilisant le hwnd de cet objet (ou si vous avez une autre methode
je suis preneur aussi)



la reponce a cette question me permetrais de transformer ma classe en controleuser

http://www.vbfrance.com/code.aspx?id=29395


Meci d'avance


"Le difficile c'est ce qui peut-être fait tout de suite.
L'impossible, c'est ce qui prend un peu plus de temps.", George
Santayana

16 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 févr. 2005 à 16:52
La fonction de l'API GetDC est faite pour cà !

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
0
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 16:57
a mon grand regret sa ne parche pas regarde un petit exemple tous pres si tu veu tester



VERSION 5.00

Begin VB.Form Form1

BackColor = &H000404C4&

Caption = "Form1"

ClientHeight = 7290

ClientLeft = 60

ClientTop = 450

ClientWidth = 12555

LinkTopic = "Form1"

Picture = "2.frx":0000

ScaleHeight = 486

ScaleMode = 3 'Pixel

ScaleWidth = 837

StartUpPosition = 3 'Windows Default

Begin VB.CommandButton Command1

Caption = "Command1"

Height = 375

Left = 4080

TabIndex = 1

Top = 1920

Width = 2415

End

Begin VB.PictureBox pic

AutoRedraw = -1 'True

Height = 1815

Left = 6360

ScaleHeight = 117

ScaleMode = 3 'Pixel

ScaleWidth = 125

TabIndex = 0

Top = 4920

Width = 1935

End

End

Attribute VB_Name = "Form1"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

Option Explicit

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function StretchBlt Lib "gdi32"
(ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long,
ByVal dwRop As Long) As Long



Private Sub Command1_Click()

Call StretchBlt(pic.hdc, 0, 0, pic.ScaleWidth,
pic.ScaleHeight, GetDC(Me.hwnd), pic.Left, pic.Top, pic.ScaleWidth,
pic.ScaleHeight, &HCC0020)

pic.Refresh

End Sub

"Le difficile c'est ce qui peut-être fait tout de suite.
L'impossible, c'est ce qui prend un peu plus de temps.", George
Santayana
0
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 16:58
oups g valider avant d'avoir terrminer lol



alors que si on remplace


la ligne

Call StretchBlt(pic.hdc, 0, 0, pic.ScaleWidth,
pic.ScaleHeight, GetDC(Me.hwnd), pic.Left, pic.Top, pic.ScaleWidth,
pic.ScaleHeight, &HCC0020)



par




Call StretchBlt(pic.hdc, 0, 0, pic.ScaleWidth,
pic.ScaleHeight,Me.hdc, pic.Left, pic.Top, pic.ScaleWidth,
pic.ScaleHeight, &HCC0020)



sa marche tres bien



je n'est pas d'explication mais c comme sa


"Le difficile c'est ce qui peut-être fait tout de suite.
L'impossible, c'est ce qui prend un peu plus de temps.", George
Santayana
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 févr. 2005 à 17:11
Essaye alors la fonction GetWindowDC

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 17:16
non plus, sa capture aussi le dc de la picturebox alors que je veu seulement le dc du controle. Mais merci qd meme.



la je regarde l'api GetDCEx mais je comprand pas trop comment elle
fonctionne et je n'est pas trouver d'exemple sur le net, tu n'aurais
pas qq info par hasard ?


"Le difficile c'est ce qui peut-être fait tout de suite.
L'impossible, c'est ce qui prend un peu plus de temps.", George
Santayana
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 févr. 2005 à 17:24
"sa capture aussi le dc de la
picturebox alors que je veu seulement le dc du controle" ??? Càd ? Tu
veux le DC du picturebox ou de la feuille ?

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
0
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 17:27
c'est comme si j'avais un DC globale, avec GetWindowDC
je capture l'image de toute la feuillle (la form et ses controle) alors
que je veu juste recuperer l'image qui se trouve dans la form (enfin
dans cet exemple, mais sinon sa peu etre de n'importe qu'elle controle).



il me faut le dc pour recuperer l'ipmage que contien le controle en faite.


"Le difficile c'est ce qui peut-être fait tout de
suite. L'impossible, c'est ce qui prend un peu plus de temps.", George
Santayana
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 févr. 2005 à 17:46
PaintPicture marche très bien.

Pic.PaintPicture Me.Picture, 0, 0, Pic.ScaleWidth, Pic.ScaleHeight, Pic.Left, Pic.Top, Pic.ScaleWidth, Pic.ScaleHeight

Daniel
0
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 17:54
non il me faut trouver un autre moyen que
paintpicture car d' abord question performance c'est pas terrible mais sur tous
c'est qu'il me faut une api car je manipule pas les objet pour pouvoir avoir
l'image je ne possede juste le hwnd du controle c'est tous !

"Le
difficile c'est ce qui peut-être fait tout de suite. L'impossible,
c'est ce qui prend un peu plus de temps.", George Santayana
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 févr. 2005 à 19:02
Je viens de tester, et GetDC marche très bien.



L'inconvénient de GetWindowDC est que tu récupère le DC d'affichage de
toute la fenêtre, donc ce n'est peut-être pas ce que tu recherche, mais
GetDC marche très bien.



Ou est l'erreur alors ? Ben il s'agit des coordonnées que t'utilise : pic.Left,
pic.Top, c'est à dire les coordonnées de ta picturebox, donc forcément,
tu récupère l'image de ton picturebox, que tu réaffiche... Mets plutôt
: 0, 0 :




Call StretchBlt(pic.hdc, 0, 0, pic.ScaleWidth,
pic.ScaleHeight, GetDC(Me.hwnd), 0, 0, pic.ScaleWidth,
pic.ScaleHeight, vbSrcCopy)



Tu verras, ca marche déjà mieux ;)


DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
0
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 19:27
Effectivement
il recupere le dc de toute la form et
mon but et de recuperer l’image qui se trouve sous la picture box
(c'est pour sa que j'utilise ses coordonner) pour la reafficher
a l’interieur comme si il n’y avais pas de pictrebox en qq sorte donc
sa marche
toujours pas snif

"Le difficile c'est ce qui peut-être
fait tout de suite. L'impossible, c'est ce qui prend un peu plus de
temps.", George Santayana
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 févr. 2005 à 19:32
Ah mais attend, ton but s'est de rendre transparent ton usercontrol ? Car à ce moment là, il existe la propriété BackStyle.



Idem, si tu veux rendre un picturebox transparent, fait un usercontrol, ce sera plus simple !

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 févr. 2005 à 19:41
comme l'image est cachée StretchBlt ne pourra pas la récupérer ce que PaintPicture est capable de faire.
si tu veux aller chercher l'image qui se trouve derrière la PictureBox, il faut déplacer provisoirement la PictureBox, ensuite copier l'image, et enfin la remettre à sa place.

Daniel
0
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 19:41
non je peu pas utiliser cet propriete car la classe que j'utilise
apres ne peu plus rien dessiner dans le conrole si j'active la
transparence, il me faut absolument un moyen de recuperer l'image

"Le
difficile c'est ce qui peut-être fait tout de suite. L'impossible,
c'est ce qui prend un peu plus de temps.", George Santayana
0
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
13 févr. 2005 à 19:45
Gobillot -> je ne peu pas me permetre de faire de tel operation trop couteuse en resource lorsqu'il y a un nombre important de controle, si j'arrive a recuperer l'image ac obj.hdc je voi pas pr quoi je pourais pas avec une api !!! je suis sur que c'est possible

"Le difficile c'est ce qui peut-être fait tout de suite. L'impossible, c'est ce qui prend un peu plus de temps.", George Santayana
0
bidoch78 Messages postés 67 Date d'inscription mercredi 27 février 2002 Statut Membre Dernière intervention 2 décembre 2005
15 févr. 2005 à 09:22
Et pourquoi tu n'essayes pas de travailler directement avec la propriété Image du formulaire.

Bidoch78
0
Rejoignez-nous