GDI + Graphics in Visual Basic .NET-zelfstudie

GDI + is de manier om vormen, lettertypen, afbeeldingen of over het algemeen iets grafischs te tekenen Visual Basic .NETTO.

Dit artikel is het eerste deel van een complete inleiding tot het gebruik van GDI + in Visual Basic .NET.

GDI + is een ongebruikelijk onderdeel van .NET. Het was hier voordat .NET (GDI + werd uitgebracht met Windows XP) en het deelt niet dezelfde updatecycli als het .NET Framework. In de documentatie van Microsoft staat meestal dat Microsoft Windows GDI + een API is C / C ++ programmeurs in het Windows-besturingssysteem. Maar GDI + ook omvat de naamruimten gebruikt in VB.NET voor op software gebaseerde grafische programmering.

WPF

Maar dat is het niet enkel en alleen grafische software van Microsoft, vooral sinds Framework 3.0. Toen Vista en 3.0 werden geïntroduceerd, werd de totaal nieuwe WPF ermee geïntroduceerd. WPF is een hardwareversnelde benadering van afbeeldingen op hoog niveau. Zoals Tim Cahill, Microsoft WPF-softwareteamlid, het stelt, met WPF "beschrijf je je scène met behulp van hoogwaardige constructies, en we zullen ons zorgen maken over de "En het feit dat het hardware-versneld is, betekent dat u de werking van de tekening van uw pc-processor niet hoeft te slepen scherm. Veel van het echte werk wordt gedaan door uw grafische kaart.

instagram viewer

We zijn hier echter eerder geweest. Elke 'grote sprong voorwaarts' gaat meestal gepaard met een paar struikelblokken achteruit, en bovendien zal het jaren duren voordat WPF zich een weg baant door de ontelbare bytes van GDI + -code. Dat geldt vooral omdat WPF er bijna van uitgaat dat je werkt met een krachtig systeem met veel geheugen en een hete grafische kaart. Daarom konden veel pc's Vista niet draaien (of in ieder geval de Vista "Aero" -graphics gebruiken) toen het voor het eerst werd geïntroduceerd. Dus deze serie blijft beschikbaar op de site voor iedereen die er gebruik van moet blijven maken.

Goede Ol 'Code

GDI + is niet iets dat u naar een formulier kunt slepen zoals andere componenten in VB.NET. In plaats daarvan moeten GDI + -objecten over het algemeen op de oude manier worden toegevoegd - door ze helemaal opnieuw te coderen! (Hoewel VB .NET een aantal zeer handige codefragmenten bevat die u echt kunnen helpen.)

Om GDI + te coderen, gebruikt u objecten en hun leden uit een aantal .NET-naamruimten. (Op dit moment zijn dit eigenlijk wrapper-code voor Windows OS-objecten die het werk daadwerkelijk doen.)

Naamruimten

De naamruimten in GDI + zijn:

Systeem. Tekening

Dit is de kern GDI + naamruimte. Het definieert objecten voor basisweergave (lettertypen, pennen, basisborstels, enz.) en het belangrijkste object: afbeeldingen. We zullen er meer van zien in slechts een paar alinea's.

Systeem. Tekening. Tekening 2D

Dit geeft u objecten voor geavanceerdere tweedimensionale vectorafbeeldingen. Sommigen van hen zijn verloopborstels, pendoppen en geometrische transformaties.

Systeem. Tekening. In beeld brengen

Als u grafische afbeeldingen wilt wijzigen - dat wil zeggen, het palet wilt wijzigen, metagegevens van afbeeldingen wilt extraheren, metabestanden wilt bewerken, enzovoort - dan is dit degene die u nodig hebt.

Systeem. Tekening. Afdrukken

Gebruik de objecten hier om afbeeldingen op de afgedrukte pagina weer te geven, interactie te hebben met de printer zelf en het algehele uiterlijk van een afdruktaak op te maken.

Systeem. Tekening. Tekst

U kunt met deze naamruimte verzamelingen lettertypen gebruiken.

Grafisch object

De plaats om te beginnen met GDI + is de Graphics voorwerp. Hoewel de dingen die u tekent op uw monitor of een printer verschijnen, is het grafische object het "canvas" waarop u tekent.

Maar het Graphics-object is ook een van de eerste bronnen van verwarring bij het gebruik van GDI +. Het Graphics-object wordt altijd geassocieerd met een bepaald object apparaatcontext. Dus het eerste probleem waarmee vrijwel elke nieuwe student van GDI + wordt geconfronteerd, is: "Hoe kom ik aan een grafisch object?"

Er zijn twee manieren:

  1. Je kunt de e gebeurtenisparameter die wordt doorgegeven aan de OnPaint evenement met de PaintEventArgs voorwerp. Verschillende evenementen passeren de PaintEventArgs en u kunt de gebruiken om te verwijzen naar het grafische object dat al wordt gebruikt door de apparaatcontext.
  2. Je kunt de CreateGraphics methode voor een apparaatcontext om een ​​grafisch object te maken.

Hier is een voorbeeld van de eerste methode:

Beveiligde overschrijft Sub OnPaint (_. ByVal e als systeem. Ramen. Formulieren. PaintEventArgs) Dim g As Graphics = e. Graphics. g. DrawString ("Over Visual Basic" & vbCrLf _. & "en GDI +" & vbCrLf & "Een geweldig team", _. Nieuw lettertype ("Times New Roman", 20), _. Borstels. Firebrick, 0, 0) MyBase. OnPaint (e) Einde Sub

Klik hier om de afbeelding weer te geven

Voeg dit toe aan de klasse Form1 voor een standaard Windows-toepassing om het zelf te coderen.

In dit voorbeeld is er al een Graphics-object gemaakt voor het formulier Formulier 1. Het enige wat uw code hoeft te doen, is een lokale instantie van dat object maken en deze gebruiken om op hetzelfde formulier te tekenen. Merk op dat uw code Overschrijft de OnPaint methode. Daarom MyBase. OnPaint (e) wordt uitgevoerd aan het einde. U moet ervoor zorgen dat als het basisobject (het object dat u overschrijft) iets anders doet, het de kans krijgt om het te doen. Vaak werkt uw code zonder dit, maar het is een goed idee.

PaintEventArgs

U kunt ook een grafisch object krijgen met de PaintEventArgs object overhandigd aan uw code in de OnPaint en OnPaintBackground-methoden van een formulier. De PrintPageEventArgs doorgegeven in een Print pagina gebeurtenis zal een grafisch object bevatten om af te drukken. Het is zelfs mogelijk om voor sommige afbeeldingen een Graphics-object te krijgen. Hiermee kunt u rechtstreeks op de afbeelding schilderen zoals u op een formulier of onderdeel zou schilderen.

Event Handler

Een andere variant van methode één is het toevoegen van een gebeurtenishandler voor de Verf evenement voor het formulier. Zo ziet die code eruit:

Private Sub Form1_Paint (_. ByVal-afzender As Object, _. ByVal e als systeem. Ramen. Formulieren. PaintEventArgs) _. Behandelt mij. Verf. Dim g als afbeeldingen = e. Graphics. g. DrawString ("Over Visual Basic" & vbCrLf _. & "en GDI +" & vbCrLf & "Een geweldig team", _. Nieuw lettertype ("Times New Roman", 20), _. Borstels. Vuursteen, 0, 0) Einde Sub

CreateGraphics

De tweede methode om een ​​grafisch object voor uw code te krijgen, gebruikt a CreateGraphics methode die beschikbaar is met veel componenten. De code ziet er zo uit:

Private Sub Button 1_Click (_. ByVal-afzender als systeem. Voorwerp, _. ByVal e als systeem. EventArgs) _. Knop Handles 1. klik. Dim g = ik. CreateGraphics. g. DrawString ("Over Visual Basic" & vbCrLf _. & "en GDI +" & vbCrLf & "Een geweldig team", _. Nieuw lettertype ("Times New Roman", 20), _. Borstels. Vuursteen, 0, 0) Einde Sub

Er zijn hier een paar verschillen. Dit staat in de Knop 1. klik evenement omdat wanneer Formulier 1 schildert zichzelf opnieuw in de Laden evenement, onze graphics zijn verloren. We moeten ze dus later toevoegen. Als u dit codeert, zult u merken dat de afbeeldingen wanneer verloren gaan Formulier 1 moet opnieuw worden getekend. (Minimaliseer en maximaliseer opnieuw om dit te zien.) Dat is een groot voordeel bij het gebruik van de eerste methode.

De meeste referenties raden aan om de eerste methode te gebruiken, omdat uw afbeeldingen automatisch opnieuw worden geverfd. GDI + kan lastig zijn!