برمجة الويندوز باستخدام Win32 API function ( الدرس الأول )
بسم الله الرحمن الرحيم
تسلسل تنفيذ الرسائل داخل نظام الويندوز: يعد نظام الويندوز من بيئات البرمجة المساقة بالحدث (Event_Driven Programming Envioronment) والمقصود بالبرمجة المساقة بالحدث أي أن تسلسل تنفيذ التعليمات في البرنامج يبدأ بحدث من المستخدم مثل: (الضغط على أي مفتاح بلوحة المفاتيح أو بالماوس) ويستقبل النظام الخاص بالجهاز هذا الحدث كرسالة وتبدأ سلسلة من التفاعل بين النظام والبرنامج تسمى message_based interaction وهو تفاعل قائم على تبادل رسائل بين البرنامج ونظام الويندوز وهذا ما سأشرحه في هذا الموضوع بالإضافة إلى لمحة عن أهم الدوال المستخدمة في مثل هذه التطبيقات، ولكن قبل الحديث عن التسلسل لابد أن نعرف أن نظام الويندوز لديه جدول خاص بكل برنامج يتم انشاءه بحيث يحوي هذا الجدول على رقم ID للبرنامج و message queue (طابور للرسائل) خاصة بهذا البرنامج.
=======================================
التسلسل في تنفيذ الرسائل والمسمى بـ message_based interaction :
بعد عمل run للبرنامج يظل ينتظر أي حدث من المستخدم وكأنه يعمل loop يشيك فيها على message queu الخاصة به إلى أن يجد حدث من المستخدم.
عندما يقوم المستخدم بإجراء حدث معين وليكن ضغطه زر على لوحة المفاتيح.
يقوم نظام التشغيل (الويندوز) بتوليد رسالة مناسبة للحدث المعمول ويدرجها في message queue الخاصة بهذا البرنامج.
يقوم البرنامج بعمل ما يسمى بـ dispatch للرسالة المدرجة في الـ message queue والمقصود بعملية الـ dispatch هو: إلتقاط الرسالة من الـ message queue وقراءتها وثم إرسالها مرة اخرى الى نظام الويندوز. * لماذا يتم اعادة ارسالها الى الويندوز؟ كي يتم إعلام الويندوز بقراءة الرسالة وأن البرنامج يستعد لتنفيذها وينتظرقراءة رسالة أخرى أي لعمل time scheduling.
يقوم نظام الويندوز بارسال الرسالة الى البرنامج وذلك بإستدعاء الدالة Window Function لتنفيذ الحدث المراد عمله.
والتفاعل السابق يتم في أبسط أشكاله بين نظام التشغيل ( الويندوز ) والبرنامج.
=======================================
والبرنامج حتى يقوم بالسابق ويبني واجهة النافذة الرسومية له يحتاج على الأقل إلى دالتين هما:
WinMain function.
Window function.
WinMain function:
في الــ WinMain ( ) يتم بناء الهيكل الرئيسي لنافذة الويندوز وبالخيارات التي يحددها المبرمج وسأوضح ذلك لاحقا وهي شبيهه بالـmain في برنامج سي++ ونجد تسلسل الكود فيها كالتالي:
تعريف للـ window structure (هيكل النافذة) وذلك لتحديد خصائص النافذة المعروضة.
تسجيل النافذة الجديدة المبينة في نظام التشغيل (الويندوز) وذلك يتم بواسطة API function حتى تكون معروفة لدى النظام وأستطيع التعامل معها.
إنشاء النافذة الجديدة باستخدام API function -سيتم الحديث عنها لاحقاً بإذن الله-.
عرض النافذة على الشاشة ايضا باستخدام API function.
تشغيل الـ message loop والتي سبق وتحدثت عنها في message_based interaction وذلك حتى يتم التشييك على وجود الرسائل في message queue الخاصة بالتطبيق.
Window function:
أما الدالة الثانية WindowFunc ( ) فبداخلها الكود الخاص باستقبال الرسائل من نظام التشغيل (الويندوز) وعمل الــ actions المناسب للحدث المطلوب وذلك باستخدام switch statement.