Graphiques GDI + dans Visual Basic .NET Tutorial

GDI + est le moyen de dessiner des formes, des polices, des images ou généralement quelque chose de graphique dans Visual Basic .NET.

Cet article est la première partie d'une introduction complète à l'utilisation de GDI + dans Visual Basic .NET.

GDI + est une partie inhabituelle de .NET. Il était ici avant .NET (GDI + a été publié avec Windows XP) et il ne partage pas les mêmes cycles de mise à jour que le .NET Framework. La documentation de Microsoft indique généralement que Microsoft Windows GDI + est une API pour C / C ++ programmeurs dans le système d'exploitation Windows. Mais GDI + aussi comprend le espaces de noms utilisés dans VB.NET pour la programmation graphique logicielle.

WPF

Mais ce n'est pas le seulement logiciel graphique fourni par Microsoft, notamment depuis Framework 3.0. Lorsque Vista et 3.0 ont été introduits, le tout nouveau WPF a été introduit avec. WPF est une approche graphique accélérée de haut niveau. Comme le dit Tim Cahill, membre de l’équipe du logiciel Microsoft WPF, avec WPF "vous décrivez votre scène à l’aide de constructions de haut niveau, et nous nous reste. "Et le fait qu'il soit accéléré par le matériel signifie que vous n'avez pas à faire glisser le fonctionnement de votre processeur PC en dessinant des formes sur le écran. Une grande partie du vrai travail est effectuée par votre carte graphique.

instagram viewer

Nous sommes déjà venus ici, cependant. Chaque "grand bond en avant" est généralement accompagné de quelques trébuchements en arrière, et en outre, il faudra des années pour que WPF se fraye un chemin à travers les zillions d'octets de code GDI +. Cela est particulièrement vrai car WPF suppose à peu près que vous travaillez avec un système à haute puissance avec beaucoup de mémoire et une carte graphique à chaud. C'est pourquoi de nombreux PC ne pouvaient pas exécuter Vista (ou du moins, utiliser les graphiques Vista "Aero") lors de son introduction. Cette série continue donc d'être disponible sur le site pour tous ceux qui ont encore besoin de l'utiliser.

Bon vieux code

GDI + n'est pas quelque chose que vous pouvez faire glisser sur un formulaire comme les autres composants de VB.NET. Au lieu de cela, les objets GDI + doivent généralement être ajoutés à l'ancienne - en les codant à partir de zéro! (Bien que VB .NET comprenne un certain nombre d'extraits de code très pratiques qui peuvent vraiment vous aider.)

Pour coder GDI +, vous utilisez des objets et leurs membres à partir d'un certain nombre d'espaces de noms .NET. (À l'heure actuelle, ce ne sont en fait que du code wrapper pour les objets du système d'exploitation Windows qui font réellement le travail.)

Espaces de noms

Les espaces de noms dans GDI + sont:

Système. Dessin

C'est le espace de noms GDI + principal. Il définit des objets pour le rendu de base (polices, stylos, pinceaux de base, etc.) et l'objet le plus important: le graphisme. Nous en verrons plus en quelques paragraphes.

Système. Dessin. Drawing2D

Cela vous donne des objets pour des graphiques vectoriels bidimensionnels plus avancés. Certains d'entre eux sont des pinceaux dégradés, des capuchons de stylo et des transformations géométriques.

Système. Dessin. Imagerie

Si vous souhaitez modifier des images graphiques - c'est-à-dire changer la palette, extraire des métadonnées d'image, manipuler des métafichiers, etc. - c'est celle dont vous avez besoin.

Système. Dessin. Impression

Pour rendre des images sur la page imprimée, interagir avec l'imprimante elle-même et formater l'apparence générale d'un travail d'impression, utilisez les objets ici.

Système. Dessin. Texte

Vous pouvez utiliser des collections de polices avec cet espace de noms.

Objet graphique

Le point de départ avec GDI + est le Graphique objet. Bien que les éléments que vous dessinez apparaissent sur votre moniteur ou sur une imprimante, l'objet Graphics est le "canevas" sur lequel vous dessinez.

Mais l'objet Graphics est également l'une des premières sources de confusion lors de l'utilisation de GDI +. L'objet Graphics est toujours associé à un particulier contexte de l'appareil. Ainsi, le premier problème auquel pratiquement chaque nouvel étudiant de GDI + est confronté est: "Comment puis-je obtenir un objet graphique?"

Il existe essentiellement deux façons:

  1. Vous pouvez utiliser le e paramètre d'événement transmis au OnPaint événement avec le PaintEventArgs objet. Plusieurs événements passent PaintEventArgs et vous pouvez utiliser le pour faire référence à l’objet Graphics déjà utilisé par le contexte du périphérique.
  2. Vous pouvez utiliser le CreateGraphics pour un contexte de périphérique afin de créer un objet Graphics.

Voici un exemple de la première méthode:

Substitutions protégées Sub OnPaint (_. ByVal e As System. Les fenêtres. Formes. PaintEventArgs) Dim g As Graphics = e. Graphique. g. DrawString ("À propos de Visual Basic" & vbCrLf _. & "et GDI +" & vbCrLf & "Une grande équipe", _. Nouvelle police ("Times New Roman", 20), _. Brosses. Brique réfractaire, 0, 0) MyBase. OnPaint (e) End Sub

Cliquez ici pour afficher l'illustration

Ajoutez-le dans la classe Form1 pour une application Windows standard pour le coder vous-même.

Dans cet exemple, un objet Graphics est déjà créé pour le formulaire Formulaire 1. Tout ce que votre code a à faire est de créer une instance locale de cet objet et de l'utiliser pour dessiner sur le même formulaire. Notez que votre code Remplace le OnPaint méthode. C'est pourquoi MyBase. OnPaint (e) est exécuté à la fin. Vous devez vous assurer que si l'objet de base (celui que vous remplacez) fait autre chose, il a une chance de le faire. Souvent, votre code fonctionne sans cela, mais c'est une bonne idée.

PaintEventArgs

Vous pouvez également obtenir un objet Graphics en utilisant le PaintEventArgs objet remis à votre code dans le OnPaint et Méthodes OnPaintBackground d'un formulaire. le PrintPageEventArgs passé dans un Imprimer la page L'événement contiendra un objet Graphics pour l'impression. Il est même possible d'obtenir un objet Graphics pour certaines images. Cela vous permet de peindre directement sur l'image de la même manière que vous peindriez sur une fiche ou un composant.

Gestionnaire d'événements

Une autre variante de la première méthode consiste à ajouter un gestionnaire d'événements pour le Peindre événement pour le formulaire. Voici à quoi ressemble ce code:

Sous-formulaire privé1_Peinture (_. Expéditeur ByVal en tant qu'objet, _. ByVal e As System. Les fenêtres. Formes. PaintEventArgs) _. Me gère. Peindre. Dim g As Graphics = e. Graphique. g. DrawString ("À propos de Visual Basic" & vbCrLf _. & "et GDI +" & vbCrLf & "Une grande équipe", _. Nouvelle police ("Times New Roman", 20), _. Brosses. Brique réfractaire, 0, 0) End Sub

CreateGraphics

La deuxième méthode pour obtenir un objet Graphics pour votre code utilise un CreateGraphics qui est disponible avec de nombreux composants. Le code ressemble à ceci:

Sous-bouton privé1_Cliquez (_. Expéditeur ByVal en tant que système. Objet, _. ByVal e As System. EventArgs) _. Poignées Button1.Click. Dim g = Moi. CreateGraphics. g. DrawString ("À propos de Visual Basic" & vbCrLf _. & "et GDI +" & vbCrLf & "Une grande équipe", _. Nouvelle police ("Times New Roman", 20), _. Brosses. Brique réfractaire, 0, 0) End Sub

Il y a quelques différences ici. C'est dans le Button1.Click événement parce que quand Formulaire 1 se repeint dans le Charge événement, nos graphiques sont perdus. Nous devons donc les ajouter lors d'un événement ultérieur. Si vous codez ceci, vous remarquerez que les graphiques sont perdus lorsque Formulaire 1 doit être redessiné. (Réduisez et maximisez à nouveau pour voir ceci.) C'est un gros avantage d'utiliser la première méthode.

La plupart des références recommandent d'utiliser la première méthode car vos graphiques seront repeints automatiquement. GDI + peut être délicat!