GDI + to sposób rysowania kształtów, czcionek, obrazów lub ogólnie dowolnej grafiki Visual Basic .NETTO.
Ten artykuł jest pierwszą częścią pełnego wprowadzenia do korzystania z GDI + w Visual Basic .NET.
GDI + to niezwykła część platformy .NET. To było tutaj przed .NET (GDI + został wydany z Windows XP) i nie ma takich samych cykli aktualizacji jak .NET Framework. Dokumentacja Microsoft zwykle stwierdza, że Microsoft Windows GDI + to API dla C / C ++ programistów do systemu operacyjnego Windows. Ale GDI + również obejmuje przestrzenie nazw używane w VB.NET do programowania grafiki opartej na oprogramowaniu.
WPF
Ale to nie jest tylko oprogramowanie graficzne dostarczane przez Microsoft, zwłaszcza od Framework 3.0. Kiedy wprowadzono Vistę i 3.0, wprowadzono z nią zupełnie nowy WPF. WPF to wysokopoziomowe, przyspieszane sprzętowo podejście do grafiki. Jak ujął to Tim Cahill, członek zespołu Microsoft WPF ds. Oprogramowania, wraz z WPF „opisujesz swoją scenę za pomocą konstruktów wysokiego poziomu, a my będziemy się martwić reszta. ”A fakt, że jest przyspieszany sprzętowo, oznacza, że nie musisz przeciągać operacji procesora komputera rysującego kształty na ekran. Większość prawdziwej pracy wykonuje karta graficzna.
Byliśmy tu jednak wcześniej. Każdemu „wielkiemu skokowi naprzód” towarzyszy zwykle kilka potknięć do tyłu, a poza tym WPF zajmie lata, by przejść przez zilliony bajtów kodu GDI +. Jest to szczególnie prawdziwe, ponieważ WPF prawie zakłada, że pracujesz z systemem o dużej mocy z dużą ilością pamięci i gorącą kartą graficzną. Dlatego na wielu komputerach PC nie można było uruchomić systemu Vista (a przynajmniej użyć grafiki „Aero” systemu Vista), gdy została wprowadzona po raz pierwszy. Ta seria jest więc nadal dostępna na stronie dla wszystkich, którzy nadal muszą z niej korzystać.
Dobry kod Ol
GDI + nie jest czymś, co można przeciągnąć na formularz podobny do innych komponentów w VB.NET. Zamiast tego, obiekty GDI + zazwyczaj trzeba dodawać starym sposobem - kodując je od zera! (Chociaż VB .NET zawiera wiele bardzo przydatnych fragmentów kodu, które naprawdę mogą ci pomóc.)
Do kodowania GDI + używasz obiektów i ich członków z wielu przestrzeni nazw .NET. (W chwili obecnej są to po prostu kody otokowe dla obiektów systemu operacyjnego Windows, które faktycznie działają.)
Przestrzenie nazw
Przestrzenie nazw w GDI + to:
System. Rysunek
To jest podstawowa przestrzeń nazw GDI +. Definiuje obiekty do podstawowego renderowania (czcionki, długopisy, podstawowe pędzle itp.) i najważniejszy obiekt: grafika. Więcej o tym zobaczymy w kilku akapitach.
System. Rysunek. Drawing2D
Daje to obiekty do bardziej zaawansowanej dwuwymiarowej grafiki wektorowej. Niektóre z nich to pędzle gradientowe, wieczka do piór i transformaty geometryczne.
System. Rysunek. Obrazowanie
Jeśli chcesz zmienić obrazy graficzne - to znaczy zmienić paletę, wyodrębnić metadane obrazu, manipulować metaplikami i tak dalej - to jest to, czego potrzebujesz.
System. Rysunek. Druk
Aby renderować obrazy na wydrukowanej stronie, wchodzić w interakcje z samą drukarką i formatować ogólny wygląd zadania drukowania, użyj tutaj obiektów.
System. Rysunek. Tekst
W tej przestrzeni nazw można używać kolekcji czcionek.
Obiekt graficzny
Miejsce na początek z GDI + to Grafika obiekt. Chociaż rzeczy, które rysujesz, pojawiają się na monitorze lub drukarce, obiekt graficzny jest „płótnem”, na którym rysujesz.
Ale obiekt graficzny jest również jednym z pierwszych źródeł nieporozumień podczas korzystania z GDI +. Obiekt graficzny jest zawsze powiązany z określonym kontekst urządzenia. Pierwszym problemem, z którym boryka się praktycznie każdy nowy uczeń GDI +, jest: „Jak uzyskać obiekt graficzny?”
Istnieją zasadniczo dwa sposoby:
- Możesz użyć mi parametr zdarzenia przekazywany do OnPaint wydarzenie z PaintEventArgs obiekt. Kilka wydarzeń przechodzi PaintEventArgs i możesz użyć w celu odniesienia do obiektu Graphics, który jest już używany przez kontekst urządzenia.
- Możesz użyć CreateGraphics metoda kontekstu urządzenia, aby utworzyć obiekt Graphics.
Oto przykład pierwszej metody:
Protected Overrides Sub OnPaint (_. ByVal e As System. Windows Formularze PaintEventArgs) Dim g As Graphics = e. Grafika. sol. DrawString („Informacje o Visual Basic” i vbCrLf _. i „oraz GDI +” oraz vbCrLf i „A Great Team”, _. Nowa czcionka („Times New Roman”, 20), _. Szczotki Firebrick, 0, 0) MyBase. OnPaint (e) Napis końcowy
Kliknij tutaj, aby wyświetlić ilustrację
Dodaj to do klasy Form1 dla standardowej aplikacji Windows, aby samodzielnie ją kodować.
W tym przykładzie obiekt graficzny jest już utworzony dla formularza Formularz 1. Wszystko, co musisz zrobić, to utworzyć lokalną instancję tego obiektu i użyć go do rysowania w tej samej formie. Zauważ, że twój kod Zastępuje OnPaint metoda. Dlatego MyBase. OnPaint (e) jest wykonywany na końcu. Musisz upewnić się, że jeśli obiekt podstawowy (ten, który zastępujesz) robi coś innego, ma szansę to zrobić. Często twój kod działa bez tego, ale to dobry pomysł.
PaintEventArgs
Możesz również uzyskać obiekt graficzny za pomocą PaintEventArgs obiekt przekazany do twojego kodu w OnPaint i Metody OnPaintBackground formularzowy. The PrintPageEventArgs zdany w Wydrukuj stronę wydarzenie będzie zawierać obiekt graficzny do wydrukowania. Możliwe jest nawet uzyskanie obiektu graficznego dla niektórych obrazów. Dzięki temu możesz malować bezpośrednio na obrazie w taki sam sposób, jak malowałbyś na formularzu lub komponencie.
Obsługa zdarzeń
Inną odmianą metody pierwszej jest dodanie procedury obsługi zdarzeń dla Farba wydarzenie dla formularza. Oto jak wygląda ten kod:
Prywatny formularz podrzędny1_Paint (_. ByVal nadawca jako obiekt, _. ByVal e As System. Windows Formularze PaintEventArgs) _. Zajmuje się mną. Farba. Dim g As Graphics = e. Grafika. sol. DrawString („Informacje o Visual Basic” i vbCrLf _. i „oraz GDI +” oraz vbCrLf i „A Great Team”, _. Nowa czcionka („Times New Roman”, 20), _. Szczotki Cegła ognista, 0, 0) Napis końcowy
CreateGraphics
Druga metoda uzyskania obiektu graficznego dla kodu wykorzystuje CreateGraphics metoda dostępna z wieloma komponentami. Kod wygląda następująco:
Prywatny przycisk podrzędny1_Kliknij (_. ByVal nadawca jako system. Obiekt, _. ByVal e As System. EventArgs) _. Uchwyty Button1.Click. Dim g = Ja. CreateGraphics. sol. DrawString („Informacje o Visual Basic” i vbCrLf _. i „oraz GDI +” oraz vbCrLf i „A Great Team”, _. Nowa czcionka („Times New Roman”, 20), _. Szczotki Cegła ognista, 0, 0) Napis końcowy
Jest tu kilka różnic. To jest w Button1.Click wydarzenie, ponieważ kiedy Formularz 1 odmalowuje się w Załaduj wydarzenie, nasza grafika zginęła. Musimy więc dodać je w późniejszym wydarzeniu. Jeśli to kodujesz, zauważysz, że grafika zostanie utracona, kiedy Formularz 1 trzeba przerysować. (Ponownie zmaksymalizuj i zmaksymalizuj, aby to zobaczyć.) To duża zaleta korzystania z pierwszej metody.
Większość referencji zaleca użycie pierwszej metody, ponieważ grafika zostanie automatycznie odmalowana. GDI + może być trudne!