GDI + er måden at tegne figurer, skrifttyper, billeder eller generelt noget grafisk i Visual Basic .NET.
Denne artikel er den første del af en komplet introduktion til brug af GDI + i Visual Basic .NET.
GDI + er en usædvanlig del af .NET. Det var her før .NET (GDI + blev frigivet med Windows XP), og det deler ikke de samme opdateringscyklusser som .NET Framework. Microsofts dokumentation angiver normalt, at Microsoft Windows GDI + er en API til C / C ++ programmerere til Windows OS. Men GDI + også inkluderer navneområder brugt i VB.NET til softwarebaseret grafisk programmering.
WPF
Men det er ikke kun grafik-software leveret af Microsoft, især da Framework 3.0. Da Vista og 3.0 blev introduceret, blev den helt nye WPF introduceret med den. WPF er en hardware-accelereret tilgang til grafik på højt niveau. Som Tim Cahill, Microsoft WPF-softwareteammedlem, udtrykker det med WPF "beskriver du din scene ved hjælp af konstruktioner på højt niveau, og vi vil bekymre os om hvile. "Og det faktum, at det er hardware-accelereret, betyder, at du ikke behøver at trække funktionen ned på din pc-processor, der tegner figurer på skærm. Meget af det virkelige arbejde udføres af dit grafikkort.
Vi har imidlertid været her før. Hvert "stort spring fremad" ledsages normalt af et par snuble bagud, og derudover vil det tage år for WPF at arbejde sig igennem de zillioner byte af GDI + -kode. Det er især sandt, da WPF næsten antager, at du arbejder med et højdrevet system med masser af hukommelse og et varmt grafikkort. Derfor kunne mange pc'er ikke køre Vista (eller i det mindste bruge Vista "Aero" -grafikken), da det først blev introduceret. Så denne serie er fortsat tilgængelig på siden for enhver og enhver, der fortsat har brug for at bruge den.
God Ol-kode
GDI + er ikke noget, du kan trække til en form som andre komponenter i VB.NET. I stedet skal GDI + -objekter generelt tilføjes på den gamle måde - ved at kode dem fra bunden! (Skønt VB .NET inkluderer et antal meget praktiske kodestykker, der virkelig kan hjælpe dig.)
For at kode GDI + bruger du objekter og deres medlemmer fra et antal .NET-navneområder. (På nuværende tidspunkt er disse faktisk bare indpakningskode til Windows OS-objekter, der faktisk udfører arbejdet.)
namespaces
Navnefladerne i GDI + er:
System. Tegning
Dette er det kerne GDI + navneområde. Det definerer objekter til grundlæggende gengivelse (skrifttyper, kuglepenne, grundbørster osv.) og det vigtigste objekt: Grafik. Vi ser mere af dette i bare et par afsnit.
System. Tegning. Drawing2D
Dette giver dig objekter til mere avanceret to-dimensionel vektorgrafik. Nogle af dem er gradientbørster, penhætter og geometriske transformationer.
System. Tegning. Imaging
Hvis du vil ændre grafiske billeder - det vil sige, ændre paletten, udpakke billedmetadata, manipulere metafiler osv. - dette er den du har brug for.
System. Tegning. Trykning
Brug objekterne her til at gengive billeder til den udskrevne side, interagere med selve printeren og formatere det samlede udseende af et udskriftsjob.
System. Tegning. Tekst
Du kan bruge samlinger af skrifttyper med dette navneområde.
Grafikobjekt
Stedet at starte med GDI + er stedet Grafik objekt. Selvom de ting, du tegner, vises på din skærm eller en printer, er grafikobjektet det "lærred", du tegner på.
Men grafikobjektet er også en af de første forvirringskilder, når man bruger GDI +. Grafikobjektet er altid forbundet med et bestemt enhedskontekst. Så det første problem, som stort set alle nye studerende af GDI + konfronterer, er, "Hvordan får jeg et grafikobjekt?"
Der er dybest set to måder:
- Du kan bruge e begivenhedsparameter, der sendes til OnPaint begivenhed med PaintEventArgs objekt. Flere begivenheder passerer PaintEventArgs og du kan bruge til at henvise til det grafikobjekt, der allerede bruges af enhedskonteksten.
- Du kan bruge CreateGraphics metode til en enhedskontekst for at oprette et grafikobjekt.
Her er et eksempel på den første metode:
Protected Overrides Sub OnPaint (_. ByVal e As System. Windows. Formularer. PaintEventArgs) Dim g As Graphics = e. Grafik. g. DrawString ("Om Visual Basic" & vbCrLf _. & "og GDI +" & vbCrLf & "Et godt team", _. Ny skrifttype ("Times New Roman", 20), _. Børster. Firebrick, 0, 0) MyBase. OnPaint (e) Afslut under
Klik her for at få vist illustrationen
Føj dette til Form1-klassen for et standard Windows-program for at kode det selv.
I dette eksempel er der allerede oprettet et grafikobjekt til formularen Form1. Alt din kode skal gøre er at oprette en lokal forekomst af dette objekt og bruge det til at tegne på den samme form. Bemærk, at din kode tilsidesætter det OnPaint metode. Derfor MyBase. OnPaint (e) udføres i slutningen. Du skal sørge for, at hvis basisobjektet (det, du tilsidesætter) gør noget andet, får det en chance for at gøre det. Ofte fungerer din kode uden dette, men det er en god ide.
PaintEventArgs
Du kan også få et grafikobjekt ved hjælp af PaintEventArgs genstand leveret til din kode i OnPaint og OnPaintBackground-metoder af en form. Det PrintPageEventArgs bestået i en Printervenlig side begivenhed vil indeholde et grafikobjekt til udskrivning. Det er endda muligt at få et grafikobjekt til nogle billeder. Dette kan lade dig male lige på billedet på samme måde som du maler på en formular eller komponent.
Event Handler
En anden variation af metode én er at tilføje en begivenhedshåndterer til Maling begivenhed for formularen. Sådan ser koden ud:
Privat subform1_Maling (_. ByVal-afsender som objekt, _. ByVal e As System. Windows. Formularer. PaintEventArgs) _. Håndterer mig. Maling. Dim g Som grafik = e. Grafik. g. DrawString ("Om Visual Basic" & vbCrLf _. & "og GDI +" & vbCrLf & "Et godt team", _. Ny skrifttype ("Times New Roman", 20), _. Børster. Firebrick, 0, 0) Afslut under
CreateGraphics
Den anden metode til at få et grafikobjekt til din kode bruger a CreateGraphics metode, der er tilgængelig med mange komponenter. Koden ser sådan ud:
Privat underknap1_Klik (_. ByVal afsender som system. Objekt, _. ByVal e As System. EventArgs) _. Håndtag-knap1.Klik. Dim g = mig. CreateGraphics. g. DrawString ("Om Visual Basic" & vbCrLf _. & "og GDI +" & vbCrLf & "Et godt team", _. Ny skrifttype ("Times New Roman", 20), _. Børster. Firebrick, 0, 0) Afslut under
Der er et par forskelle her. Dette er i Button1.Click begivenhed, fordi hvornår Form1 gentager sig selv i belastning begivenhed, vores grafik går tabt. Så vi er nødt til at tilføje dem i en senere begivenhed. Hvis du koder dette, vil du bemærke, at grafikken går tabt, når Form1 skal tegnes igen. (Efterlign og maksimér igen for at se dette.) Det er en stor fordel ved at bruge den første metode.
De fleste referencer anbefaler at bruge den første metode, da din grafik males igen automatisk. GDI + kan være vanskelig!