رسومات GDI + في برنامج Visual Basic .NET التعليمي

GDI + هي طريقة لرسم الأشكال أو الخطوط أو الصور أو أي شيء رسومي بشكل عام البصرية الأساسية .شبكة.

هذه المقالة هي الجزء الأول من مقدمة كاملة لاستخدام GDI + في Visual Basic .NET.

GDI + جزء غير عادي من .NET. لقد كان هنا قبل .NET (تم إصدار GDI + مع Windows XP) ولا يشترك في دورات التحديث نفسها مثل .NET Framework. تنص وثائق Microsoft عادةً على أن Microsoft Windows GDI + هو واجهة برمجة تطبيقات لـ C / C ++ المبرمجين في نظام التشغيل Windows. لكن GDI + أيضا يشمل مساحات الأسماء المستخدمة في VB.NET لبرمجة الرسومات القائمة على البرمجيات.

WPF

لكنها ليست فقط برامج الرسومات المقدمة من Microsoft ، خاصة منذ Framework 3.0. عندما تم تقديم Vista و 3.0 ، تم تقديم WPF الجديد تمامًا معه. WPF هو نهج عالي المستوى ومسرع للأجهزة للرسومات. كما قال تيم كاهيل ، عضو فريق برنامج Microsoft WPF ، مع WPF "تصف المشهد الخاص بك باستخدام بنيات عالية المستوى ، وسنقلق بشأن بقية. "وحقيقة أنه تسريع الأجهزة يعني أنك لست مضطرًا إلى سحب عملية رسم الأشكال الخاصة بمعالج الكمبيوتر على شاشة. يتم تنفيذ الكثير من العمل الحقيقي بواسطة بطاقة الرسومات الخاصة بك.

instagram viewer

لقد كنا هنا من قبل ، ولكن. عادة ما تكون كل "قفزة كبيرة إلى الأمام" مصحوبة ببعض العثرات إلى الوراء ، بالإضافة إلى ذلك ، سيستغرق WPF سنوات حتى يشق طريقه عبر أجزاء من وحدات البايت من كود GDI +. هذا صحيح بشكل خاص لأن WPF فقط تفترض أنك تعمل مع نظام عالي الطاقة مع الكثير من الذاكرة وبطاقة رسومات ساخنة. هذا هو السبب في عدم تمكن العديد من أجهزة الكمبيوتر من تشغيل Vista (أو على الأقل ، استخدام رسومات Vista "Aero") عندما تم تقديمها لأول مرة. لذلك لا تزال هذه السلسلة متاحة على الموقع لأي شخص وكل من يحتاج إلى استخدامها.

كود جيد

GDI + ليس شيئًا يمكنك سحبه إلى نموذج مثل المكونات الأخرى في VB.NET. بدلاً من ذلك ، يجب عادةً إضافة كائنات GDI + بالطريقة القديمة - عن طريق ترميزها من البداية! (على الرغم من أن VB .NET لا يتضمن عددًا من مقتطفات التعليمات البرمجية المفيدة جدًا التي يمكن أن تساعدك حقًا.)

لتشفير GDI + ، يمكنك استخدام الكائنات وأعضائها من عدد من مساحات أسماء .NET. (في الوقت الحالي ، هذه في الواقع مجرد رمز مجمع لكائنات نظام التشغيل Windows التي تقوم بالعمل بالفعل.)

مساحات الأسماء

مساحات الأسماء في GDI + هي:

النظام. رسم

هذا هو ال مساحة الاسم الأساسية GDI +. يحدد كائنات للعرض الأساسي (الخطوطوالأقلام والفرش الأساسية وما إلى ذلك) وأهم شيء: الرسومات. سنرى المزيد من هذا في بضع فقرات فقط.

النظام. رسم. رسم 2D

يمنحك هذا كائنات لرسومات متجهة ثنائية الأبعاد أكثر تقدمًا. بعضها عبارة عن فرش متدرجة وأغطية أقلام وتحولات هندسية.

النظام. رسم. التصوير

إذا كنت ترغب في تغيير الصور الرسومية - أي تغيير اللوحة ، واستخراج بيانات تعريف الصورة ، ومعالجة ملفات التعريف ، وما إلى ذلك - فهذه هي الصورة التي تحتاجها.

النظام. رسم. الطباعة

لعرض الصور على الصفحة المطبوعة ، قم بالتفاعل مع الطابعة نفسها ، وقم بتنسيق المظهر العام لمهمة الطباعة ، استخدم الكائنات هنا.

النظام. رسم. نص

يمكنك استخدام مجموعات الخطوط مع مساحة الاسم هذه.

كائن رسومي

المكان الذي تبدأ به GDI + هو الرسومات موضوع. على الرغم من أن الأشياء التي ترسمها تظهر على الشاشة أو الطابعة ، فإن كائن الرسومات هو "اللوحة القماشية" التي ترسمها.

لكن كائن الرسومات هو أيضًا أحد مصادر الارتباك الأولى عند استخدام GDI +. يقترن كائن الرسومات دائمًا مع معين سياق الجهاز. لذا فإن المشكلة الأولى التي يواجهها كل طالب جديد تقريبًا في GDI + هي ، "كيف أحصل على كائن رسومي؟"

هناك طريقتان:

  1. يمكنك استعمال ال ه معلمة الحدث التي تم تمريرها إلى OnPaint حدث مع PaintEventArgs موضوع. تمر عدة أحداث PaintEventArgs ويمكنك استخدام للإشارة إلى كائن الرسومات الذي يتم استخدامه بالفعل بواسطة سياق الجهاز.
  2. يمكنك استعمال ال CreateGraphics طريقة لسياق الجهاز لإنشاء كائن رسومي.

إليك مثال على الطريقة الأولى:

تجاوزات المحمية الفرعية OnPaint (_. ByVal e كنظام. شبابيك. نماذج. PaintEventArgs) Dim g As Graphics = e. الرسومات. ز. DrawString ("حول Visual Basic" و vbCrLf _. & "و GDI +" & vbCrLf & "A Great Team"، _. الخط الجديد ("Times New Roman" ، 20) ، _. الفرش. Firebrick، 0، 0) MyBase. OnPaint (هـ) نهاية فرعية

انقر هنا لعرض الرسم التوضيحي

أضف هذا إلى فئة Form1 لتطبيق Windows قياسي لترميزه بنفسك.

في هذا المثال ، تم بالفعل إنشاء كائن رسومي للنموذج Form1. كل ما عليك فعله هو إنشاء رمز محلي لهذا الكائن واستخدامه للرسم على نفس النموذج. لاحظ أن رمزك تجاوزات ال OnPaint طريقة. لهذا السبب MyBase. OnPaint (هـ) يتم تنفيذه في النهاية. تحتاج إلى التأكد من أنه إذا كان الكائن الأساسي (الشيء الذي تتخطاه) يقوم بشيء آخر ، فستحصل على فرصة للقيام بذلك. غالبًا ما تعمل شفرتك بدون هذا ، لكنها فكرة جيدة.

PaintEventArgs

يمكنك أيضا الحصول على كائن رسومي باستخدام PaintEventArgs تسليم الكائن إلى التعليمات البرمجية الخاصة بك في OnPaint و طرق OnPaintBackground من نموذج. ال PrintPageEventArgs مرت في طباعة الصفحة سيحتوي الحدث على كائن رسومي للطباعة. حتى أنه من الممكن الحصول على كائن رسومي لبعض الصور. يمكن أن يتيح لك ذلك الرسم على الصورة بنفس الطريقة التي ترسم بها على نموذج أو مكون.

معالج الأحداث

اختلاف آخر في الطريقة الأولى هو إضافة معالج حدث لـ رسم حدث للنموذج. إليك ما يبدو عليه هذا الرمز:

نموذج فرعي خاص1 طلاء (_. مرسل ByVal ككائن ، _. ByVal e كنظام. شبابيك. نماذج. PaintEventArgs) _. يعالجني. رسم. Dim g As Graphics = e. الرسومات. ز. DrawString ("حول Visual Basic" و vbCrLf _. & "و GDI +" & vbCrLf & "A Great Team"، _. الخط الجديد ("Times New Roman" ، 20) ، _. الفرش. Firebrick، 0، 0) نهاية فرعية

CreateGraphics

تستخدم الطريقة الثانية للحصول على كائن رسومي لتعليماتك البرمجية CreateGraphics الطريقة المتاحة مع العديد من المكونات. يبدو الرمز كما يلي:

زر فرعي خاص 1 انقر (_. مرسل ByVal كنظام. موضوع، _. ByVal e كنظام. EventArgs) _. مقابض Button1.Click. Dim g = Me. CreateGraphics. ز. DrawString ("حول Visual Basic" و vbCrLf _. & "و GDI +" & vbCrLf & "A Great Team"، _. الخط الجديد ("Times New Roman" ، 20) ، _. الفرش. Firebrick، 0، 0) نهاية فرعية

هناك اختلافان هنا. هذا في Button1 انقر حدث لأنه متى Form1 يعيد نفسه في حمل حدث ، يتم فقدان رسوماتنا. لذا يتعين علينا إضافتها في حدث لاحق. إذا قمت بتشفير هذا ، ستلاحظ أن الرسومات تضيع عندما Form1 يجب إعادة رسمه. (قم بتكبير الصورة لتكبيرها مرة أخرى). هذه ميزة كبيرة لاستخدام الطريقة الأولى.

توصي معظم المراجع باستخدام الطريقة الأولى حيث سيتم إعادة رسم الرسومات الخاصة بك تلقائيًا. يمكن أن يكون GDI + صعبًا!