تستخدم الـ GDI+ فئتان Class أساسيتان هما Pen و Brush لتحديد مظهر ما تقوم برسمه. حيث يحدد Pen Object كيفية رسم الخطوط كاللون والسماكة والاستمرارية والتنقيط فمثلا عندما تستخدم الدالة DrawPolygon لرسم مضلع فأنت تمرر لها Pen Object يحدد كيفية رسم خطوط ذلك المضلع في حين يحدد Brush Object كيفية ملئ المساحات كاللون وطريقة التهشير والتدرج اللوني فمثلا يمكنك استخدام Brush Object لتحديد كيفية ملئ المساحات المغلقة كما نفعل عند استخدام الدالة FillRectangle لرسم مستطيل مملوء.
ويمكن تحديد الخطوات الأساسية لرسم أي شكل بشكل عام
1. إنشاء Graphics Objetc
2. تحديد Brush Object لملئ المساحات في ذلك الشكل
3. تحديد Pen Object لتحديد كيفية رسم خطوط ذلك الشكل
4. القيام بعملية الرسم باستخدام الدالة المناسبة لما نريد رسمه
فمثلا يمكنك استخدام الحدث Paint للنموذج للرسم عليه عندما يتم إعادة رسم النموذج كما في قطعة الكود التالية حيث يقدم لك إجراء الحدث Paint الوسيطة e.Graphics التي هي الـ Graphics Object الذي نستخدمه للرسم وعند انتهاء الحدث يقوم فيجول بايزيك بنقل ما تم رسمه على الـ Graphics Object إلى المنطقة المناسبة على النموذج التي يجب أن يتم الرسم عليها. حيث نقوم بإنشاء كائن SolidBrush المشتق من الكائن Brush الذي سنستخدمه لرسم دائرة مملوءة بتمريره للدالة FillEllipse ثم نقوم بإنشاء كائن Pen نقوم بتمريره للدالة DrawEllipse المستخدمة هنا لرسم دائرة تحيط بالدائرة السابقة
Private Sub Form1_Paint(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim Sb As New SolidBrush(Color.YellowGreen) e.Graphics.FillEllipse(Sb, 10, 10, 100, 100) Dim Cp As New Pen(Color.Blue, 5) e.Graphics.DrawEllipse(Cp, 10, 10, 100, 100) End Sub
و في الغالب تأتي دوال الرسم بعدة نسخ ذات تحميل زائد Overloaded فمثلا الدالة FillEllipse تمتلك أربع نسخ يمكن استخدام أي منها للرسم حسب الحاجة
Graphics.FillEllipse (Brush, Rectangle) Graphics.FillEllipse (Brush, RectangleF) Graphics.FillEllipse (Brush, Int32, Int32, Int32, Int32) Graphics.FillEllipse (Brush, Single, Single, Single, Single)
حيث يمكننا إعادة كتابة قطعة الكود السابقة باستخدام كائن Rectngle بالشكل
Dim Sb As New SolidBrush(Color.YellowGreen) Dim Rc As New Rectangle(10, 10, 100, 100) e.Graphics.FillEllipse(Sb, Rc) Dim Cp As New Pen(Color.Blue, 5) e.Graphics.DrawEllipse(Cp, Rc)
وتأتي جميع عمليات الرسم في GDI+ ضمن هذه الخطوات الأساسية للرسم ولكن كائنات Pen و Brush يمكن أن تأتي باشكال أكثر تعقيدا مما ورد هنا تلبية للحاجات المختلفة لعملية الرسم حيث يمكنك رسم مضع باستخدام ألوان متدرجة ثم إحاطته بخط منقط كما تأتي أيضا ضمن الـ GDI+ أوامر تمكنك من رسم أشياء مثيرة كالدالة DrawBezier التي تستخدم لرسم المنحنيات
يمكنك استخدام فضاء الأسماء System.Drawing.Text لرسم الخطوط بحيث يحتوي على ثلاث فئات أساسية FontCollection و InstalledFontCollection و PrivateFontCollection
فللحصول على قائمة بالخطوط المركبة على الجهاز نستخدم الفئة InstalledFontCollection التي نستخدم دالتها Families للحصول على مصفوفة FontFamily تتضمن الخطوط المركبة حيث يمكننا ملئ قائمة بالخطوط المركبة على الجهاز كما في المثال
Dim Ifonts As New Drawing.Text.InstalledFontCollection Dim Ffamilies() As FontFamily = Ifonts.Families() For Each Ffamily As FontFamily In Ffamilies lstFonts.Items.Add(Ffamily.Name) Next Ffamily lstFonts.SelectedIndex = 0
كما يحتوي فضاء الأسماء System.Drawing.Text على التعداد TextRenderingHint الذي يحدد طريقة رسم حواف الخطوط وقطعة الكود التالية تبين كيفية استخدامه لرسم الخطوط
Dim the_font As New Font(Me.Font.FontFamily, _
40, FontStyle.Bold, GraphicsUnit.Pixel)
' Draw without anti-aliasing.
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit
e.Graphics.DrawString("Alias", _
the_font, Brushes.Black, 5, 5)
' Draw with anti-aliasing.
e.Graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel
e.Graphics.DrawString("Alias", _
the_font, Brushes.Black, 5, 50)