Virtualdc ==> dessiner sans picturebox (bitblt, print, gradient, ellipse...) avec gdi32

Soyez le premier à donner votre avis sur cette source.

Vue 9 098 fois - Téléchargée 1 129 fois

Description

Salut, ce code est une classe qui permet de dessiner "en mémoire", donc en se passant d'une picturebox, puis d'appliquer ensuite notre dessin sur un contrôle grâce à son hDC.

L'avantage est évidemment la performance (bien plus rapide que de faire Picture1.Print....).

Cette classe comporte les fonctions suivantes :

- définition d'un Pen pour les dessins
- définition d'un Brush pour les dessins
- CreateMyDC (création du DC)
- PaintToDC (permet d'afficher l'image créée dans un controle)
- DrawImageToVirtualDC (permet d'ajouter une image dans le DC virtuel)
- DrawText (affichage de texte)
- DrawLine (traçage d'une ligne)
- DrawGradient (traçage d'un gradient)
- FillArea (remplissage d'une zone)
- InvertArea (inversion d'une zone)
- CreateFromPictureBox (création d'un DC virtuel directement depuis une PictureBox)
- Cls (efface)
- SetPixel (change la couleur d'un pixel)
- GetPixel (récupère la couleur d'un pixel)
- DrawFocusRect (trace un rectangle de focus)
- DrawEllipse (trace une ellipse)
- DrawRectangle (trace un rectangle)
- DrawRoundRectangle (rectangle à bords arrondis)
- DestroyDC (supprime le DC)

Cela a bien évidemment pour but d'optimiser les dessins (je l'ai fait pour mes vkUserControls).

Je tiens à préciser que je n'ai pas copié/volé le travail de PCPT !!
Je me suis inspiré de son travail (solide) pour débuter dans le domaine de GDI et réaliser ce que je voulais (ensemble complet de fonctions pour dessiner "en mémoire").
Cette source est donc issue du travail de PCPT (http://www.vbfrance.com/code.aspx?ID=43226), dont j'ai repris les fonctions importantes (hDCToPicture et CreateBitmapPicture). Je remercie évidemment PCPT !

Je suis novice dans l'utilisation de GDI, donc il peut manquer des optimisations et avoir des bugs ! N'hésitez pas à commenter et à noter ;)
@+

Source / Exemple :


'dans le zip

Conclusion :


Cela a bien évidemment pour but d'optimiser les dessins (je l'ai fait pour mes vkUserControls).
Cette source est issue du travail de PCPT (http://www.vbfrance.com/code.aspx?ID=43226), dont j'ai repris les fonctions importantes (hDCToPicture et CreateBitmapPicture).

Je suis novice dans l'utilisation de GDI, donc il peut manquer des optimisations et avoir des bugs ! N'hésitez pas à commenter ;)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
109
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
2 février 2012
3
Bonjour et bravo violent (tu porte bien ton nom je trouve) pour toutes tes excellentes sources.

Avec PCPT, vous êtes à 2 doigt de nous finir le contrôle dont tout le monde rêve:
le richRECTbox!
myrrb.picture
myrrb.line
myrrb.bordure = false
myrrb.left
myrrb.height
myrrb.text (pourquoi pas (tout simple genre printdc))
myrrb.titrebar = true
myrrb.titre = "mon rrb non invisible"
event myrrb_mouvemouss
event myrrb_wheelup
event myrrb_out
event clavier (pourquoi pas)
event focus (tant qu'à faire)
...
genre window mais sans les restrictions de windows.
Le contrôle polyvalent que l'on utilise pour tout.
(jusqu'au simple click dans une zone predefinie)

fini les labels, les picturebox et autres contrôles difficilement transportables.

Pourtant, ce contrôle n'est qu'un carré vide.
(vide mais pas creux!)

Et on peut encore lui ajouter 2-3 fonctionnalités genre myrrb.capture ou myrrb.hdlefenetredudessous...

Vous y avez déja penser n'est pas?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Viens vite au natif, seulement avec du vrai code que tu te rendras compte de ces évidences.
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Merci pour cette remarque, je l'ignorais.
@+
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
ByVal ne crée une copie que pour un tableau.
Si c'est valeur simple c'est au contraire plus rapide pour la fonction recevante, pas de pointeur à déréférencer.
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Salut,

-"penses a mettre des ByVal de temps à autres" ==> Il est vrai que je n'ai mis aucun Byval (bizarre, d'habitude je le fais ?). Mais est-ce grave (le Byval étant plus long car çà copie en mémoire la variable) puisque je ne manipule pas (je pense) les paramètres directement ?

-"DrawImageToVirtualDC : pas besoin de faire une copie du Bmp" ==> ok !

-"DrawLine...." ==> Ok je note.

-"SetPixel... utilises SetPixelV, plus rapide" ==> Ok, je le ferais ;)

-"ou manipules les bits de ton DIB :p" ==> ahah, lol, je ne maitrise pas suffisement ;)

Merci pour les conseils, @+
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.