بسم الله الرحمن الرحيم
سوف نتحدث في هذا الدرس عن طريقة إنشاء نوافذ نستطيع أن نقوم بإظهارها مثل قوائم النظام
لنصنع هذه النافذن نحتاج إلى إستيراد أحد الوظائف من النظام المعروفة بـ Applacation Programming Interface أو إختصار API وهي: AnimateWindow
يمكننا الـ C# من إستيراد هذه الوظيفة كما يلي
[DllImport("User32.dll", SetLastError = true)]
private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);سنشرح جميع البرمتيرات التي تحتاجه هذه الوظيفة:
1- hwnd: وهو مقبض النافذة التي نريد إضهارها ونستطيع أن نسنده لهذه الوظيفة عن طريق الخاصية Handle التباعة لأي Control وبما أن النوفذ تقوم بوراثة الـ Control فنحن نستطيع أن نقوم بذلك بكتابة مثل هذا الكود
Intptr hwnd = Form.Handle;
أو تمريرة بشكل مباشر إلى هذه الوظيفة
2- dwTime: فهو المدة الزمنية التي سوف تقوم هذه الوضيفة بإظهار النافذة محسوب بالمليساكند والإفتراضي للنظام الوندوز 200 ونستطيع تعديله كما نشاء
3-dwFlags: هو عبارة مجمعة من الثوابت التي تحدد طريقة إضهار النافذة أو إخفائها ونستطيع أن نجمع ما شئنا من حركات
AnimateWindow(this.Handle, 300, AW_SLIDE | AW_HOR_NEGATIVE)
أما للإخفاء فنكتب
AnimateWindow(this.Handle, 300, AW_HIDE | AW_SLIDE | AW_HOR_NEGATIVE)
ولتسهيل البرمتير الأخير نستطيع أن ننشأه كـ Enum
[Flags]
public enum AnimateWindowMode : int
{
AW_HOR_POSITIVE = 0x00000001,
AW_HOR_NEGATIVE = 0x00000002,
AW_VER_POSITIVE = 0x00000004,
AW_VER_NEGATIVE = 0x00000008,
AW_CENTER = 0x00000010,
AW_HIDE = 0x00010000,
AW_ACTIVATE = 0x00020000,
AW_SLIDE = 0x00040000,
AW_BLEND = 0x00080000
}لا تنسى أن تتضع الـ FlagsAttribute لكي نعلم الـ C# بأننا نريد أن نجمع أكثر من ثابت
إذا أردنا أن نعيد صياغة الكود السابق مع هذ الـ Enum
AnimateWindow(this.Handle, 300, AnimateWindowMode.AW_SLIDE | AnimateWindowMode.AW_HOR_NEGATIVE)
أما للإخفاء فنكتب
AnimateWindow(this.Handle, 300, AnimateWindowMode.W_HIDE | AnimateWindowMode.AW_SLIDE | AnimateWindowMode.AW_HOR_NEGATIVE)
أتمنى للجميع الفائدة ومن لدية سؤال إن شاء الله سأكون في الخدمة
يوجد مثال كامل مع المرفقات تستطيع أن تستفاد من في مشاريعك إن شاء الله


