GDI + е начинът да нарисувате форми, шрифтове, изображения или като цяло нещо графично Visual Basic .NET.
Тази статия е първата част от цялостно въведение към използването на GDI + във Visual Basic .NET.
GDI + е необичайна част от .NET. Това беше тук преди .NET (GDI + беше пуснат с Windows XP) и не споделя същите цикли на актуализиране като .NET Framework. В документацията на Microsoft обикновено се посочва, че Microsoft Windows GDI + е API за C / C ++ програмисти в Windows OS. Но GDI + също включва пространства с имена, използвани във VB.NET за софтуерно базирано графично програмиране.
WPF
Но не е това само графичен софтуер, предоставен от Microsoft, особено след Framework 3.0. Когато Vista и 3.0 бяха представени, изцяло новият WPF беше представен с него. WPF е високоскоростен, хардуерно ускорен подход към графиката. Както казва Тим Кейхил, член на екипа на софтуера на Microsoft WPF, с WPF „описваш сцената си с помощта на конструкти на високо ниво и ще се притесняваме за починете. "И фактът, че е хардуерно ускорен, означава, че не е нужно да премествате работата на вашия процесор на компютър, рисувайки форми на екран. Голяма част от истинската работа се извършва от вашата графична карта.
И преди сме били тук. Всеки "голям скок напред" обикновено е придружен от няколко спънки назад, а освен това, ще отнеме години, докато WPF ще премине през зилионите байтове от GDI + код. Това е особено вярно, тъй като WPF почти предполага, че работите с мощна система с много памет и гореща графична карта. Ето защо много компютри не можеха да работят с Vista (или поне да използват графиката на Vista "Aero") при първото му въвеждане. Така тази серия продължава да е достъпна на сайта за всички и всички, които продължават да имат нужда да я използват.
Good Ol 'Code
GDI + не е нещо, което можете да плъзнете във форма като други компоненти във VB.NET. Вместо това, GDI + обектите обикновено трябва да се добавят по стария начин - като ги кодират от нулата! (Въпреки че VB .NET включва редица много удобни кодови фрагменти, които наистина могат да ви помогнат.)
За да кодирате GDI +, използвате обекти и техните членове от редица .NET пространства от имена. (Понастоящем това са всъщност просто обвиващ код за обекти на Windows OS, които всъщност вършат работата.)
Пространствата от имена
Пространствата с имена в GDI + са:
Система. Рисуване
Това е на ядро GDI + пространство от имена. Той определя обектите за основно изобразяване (шрифтове, химикалки, основни четки и т.н.) и най-важният обект: Графика. Ще видим повече от това само в няколко абзаца.
Система. Рисуване. Drawing2D
Това ви дава обекти за по-напреднала двуизмерна векторна графика. Някои от тях са градиентни четки, капачки на химикалки и геометрични трансформации.
Система. Рисуване. Imaging
Ако искате да промените графични изображения - тоест да промените палитрата, да извлечете метаданни от изображения, да манипулирате метафайли и т.н. - това е този, който ви трябва.
Система. Рисуване. печатане
За да изобразите изображения на отпечатаната страница, да взаимодействате със самия принтер и да форматирате цялостния вид на задание за печат, използвайте обектите тук.
Система. Рисуване. Текст
Можете да използвате колекции от шрифтове с това пространство на имена.
Графичен обект
Мястото да започнете с GDI + е Graphics обект. Въпреки че нещата, които рисувате, се показват на вашия монитор или принтер, обектът Graphics е „платното“, на което рисувате.
Но обектът Graphics е и един от първите източници на объркване при използване на GDI +. Обектът Graphics винаги е свързан с конкретен контекст на устройството. Така че първият проблем, който практически всеки нов студент от GDI + се сблъсква, е: „Как да получа графика?“
По принцип има два начина:
- Можете да използвате д параметър събитие, който се предава на OnPaint събитие с PaintEventArgs обект. Няколко събития преминават PaintEventArgs и можете да използвате препратката към обекта Graphics, който вече се използва от контекста на устройството.
- Можете да използвате CreateGraphics метод за контекст на устройство за създаване на графичен обект.
Ето пример за първия метод:
Защитени отмени Sub OnPaint (_. ByVal e като система. Windows. Форми. PaintEventArgs) Dim g As Graphics = e. Graphics. гр. DrawString ("Относно Visual Basic" & vbCrLf _. & "и GDI +" & vbCrLf & "Страхотен екип", _. Нов шрифт ("Times New Roman", 20), _. Четки. Firebrick, 0, 0) MyBase. OnPaint (д) Край Sub
Щракнете тук, за да покажете илюстрацията
Добавете това в клас Form1 за стандартно приложение за Windows, за да го кодирате сами.
В този пример вече е създаден графичен обект за формата Form1. Всичко, което трябва да направите, е да създадете локален екземпляр на този обект и да го използвате, за да рисувате на същата форма. Забележете, че вашият код Замени на на OnPaint метод. Ето защо MyBase. OnPaint (д) се изпълнява в края. Трябва да сте сигурни, че ако основният обект (този, който надделявате) прави нещо друго, той получава шанс да го направи. Често кодът ви работи без това, но е добра идея.
PaintEventArgs
Можете също да получите графичен обект с помощта на PaintEventArgs обект, предаден на вашия код в OnPaint и Методите на OnPaintBackground на формуляр. Най- PrintPageEventArgs премина в a PrintPage събитието ще съдържа графичен обект за печат. Дори е възможно да получите графика за някои изображения. Това може да ви позволи да рисувате право върху изображението по същия начин, както бихте рисували върху Форма или компонент.
Мениджър на събития
Друг вариант на метод един е да добавите обработващ събитие за боя събитие за формата. Ето как изглежда този код:
Частна под форма1_Paint (_. ByVal подател като обект, _. ByVal e като система. Windows. Форми. PaintEventArgs) _. Справя се с мен. Paint. Dim g като графика = e. Graphics. гр. DrawString ("Относно Visual Basic" & vbCrLf _. & "и GDI +" & vbCrLf & "Страхотен екип", _. Нов шрифт ("Times New Roman", 20), _. Четки. Firebrick, 0, 0) Край Sub
CreateGraphics
Вторият метод за получаване на обект Graphics за вашия код използва a CreateGraphics метод, който се предлага с много компоненти. Кодът изглежда така:
Частен подбутон1_Click (_. ByVal подател като система. Обект, _. ByVal e като система. EventArgs) _. Дръжки Button1.Click. Dim g = Аз. CreateGraphics. гр. DrawString ("Относно Visual Basic" & vbCrLf _. & "и GDI +" & vbCrLf & "Страхотен екип", _. Нов шрифт ("Times New Roman", 20), _. Четки. Firebrick, 0, 0) Край Sub
Тук има няколко разлики. Това е в Button1.Click събитие, защото кога Form1 пребоядисва се в натоварване събитие, нашата графика се губи. Затова трябва да ги добавим в по-късно събитие. Ако кодирате това, ще забележите, че графиката се губи, когато Form1 трябва да се прекрои. (Минимизирайте и максимизирайте отново, за да видите това.) Това е голямо предимство от използването на първия метод.
Повечето препоръки препоръчват използването на първия метод, тъй като графиката ви ще бъде пребоядисана автоматично. GDI + може да бъде сложен!