تابع حالة الطقس في اكبر و اشهر مدن المملكة العربية السعودية | منتديات | مقاطع فيديو تحميل افلام موقع يوتيوب youtube العاب بنات hguhf fkhj | تحميل صور jpldg w,v | بلاك بيري | بنات السعودية | قصص بنات
|
اقسام على الموقع
دروس في أنظمة التشغيل | ماي سكيول - MySQL | لفيجوال بيسك - Visual Basic | المات لاب Matlab | اللينكس و اليونكس | الاسمبلي - ASSEMBLY | الاوتلوك - Outlook | البرمجة تحت اللنكس -Linux Programming | البرمجة تحت وندوز بواسطة دوال ال win API | البرمجة في بيئة الدوت نت .Net | التصمبم والرسوم | الدلفي - Delphi | الجافا - Java | السي - C | الصوت و الصورة | الوورد - Word | القسم العام للأوفيس | الكوبول - COBOL | control panel-ftp | اوراكل - Oracle | اكسل - Excel | تحميل الملفات | برامج متنوعة | برامج التصفح | برامج الحماية | برامج إنترنت | تعرّف على الويب | بوربوينت - Power Point | images | دروس : كمبيوتر وصيانة | دروس مجلة نيوك phpnuke | دروس مسنجر MSN - yahoo - Gmail | دروس منتديات vBulletin | دروس الجوالات والهواتف | دروس السي بنل cpanel | دروس اكسس access | دروس بيونت شوب برو - point shop pro | دروس برمجة php - mysql | دروس برامج منوعة software | دروس ثري دي ماكس 3D max | دروس تطوير المواقع والمنتديات | دروس جافا سكريبت JavaScript | دروس دريم ويفر DreamWeaver | دروس شبكات Networks | دروس سويش - swish | دروس فلاش - flash | دروس فلاش mx | دروس فى نظام الوندوز WINDOWS | دروس فىالباسكال - Pascal | دروس فيجوال بيسك Visual Basic | دروس فرونت بيج - frontpage | دروس فوتوشوب photoshop | دروس هكر hacker crack virus | سي ++ | سي شارب - #C | فيجوال سي ++ - ++ Visual C | قسم البرمجة العام | دروس فى لغة HTML
البحث في المواد
اكثر المحتويات زيارة
الدوال في الاكسل (14,836 مشاهده)
تعريف الفن التشكيلي: (14,801 مشاهده) ربط قاعدة بيانات أكسس (MS Access) مع برنامج الفيجوال بيسك بطريقة(ODBC) (10,761 مشاهده) دروس في الأوفيس الأكسس - Access0- (10,234 مشاهده) أنواع العلاقات وطريقة الربط بين الجداول. (10,165 مشاهده) شرح طريقة استعمال الأوتلوك مع بريد الهوتميل (7,341 مشاهده) تغيير لغة واجهة التطبيق من عربي الى انجليزي وبالعكس لـ Windows-based applications (7,336 مشاهده) ما هي شبكة الانترنت: (6,452 مشاهده) الدرس الثالث : بعض تطبيقات الدوال في اكسل (6,207 مشاهده) تعريف الاستعلام وطريقة عرضه في آكسس، أنواع الاستعلامات، نافذة تحديد الاستعلام! (6,189 مشاهده) اضافه صوت ونص لخلفيه في باور بوينت (6,183 مشاهده) المنظور الفوتوغرافي Perspective Drawing (6,131 مشاهده) ما هو برنامج الاكسل -00 (5,994 مشاهده) أنشئ قاعدة بياناتك التي ستستند إليها في تعلم طريقة ربط الجداول والاستعلامات. (5,752 مشاهده) الدرس الثاني : عمل خلفيات ملونة لشرائح (5,534 مشاهده) نظام التشغيل (Windows) (5,526 مشاهده) الدرس الأول : عمل شريحة في البوربوينت (5,431 مشاهده) الدرس الثاني: بعض الحيل لتسهيل برنامج اكسل (5,426 مشاهده) لإجراء العمليات الحسابية (4,946 مشاهده) مقدمة عامة حول الاكسل وحيل خاصة بالاكسل0-- (4,914 مشاهده) دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (4,870 مشاهده) كيفية تنصيب Turbo C++ وتشغيل برنامج بلغة السي عليه!- (4,829 مشاهده) vالدرس الأول : عمل شريحة في البوربوينت (4,819 مشاهده) الدرس الثالث: كيفية عمل مراحل انتقالية للشرائح (4,810 مشاهده) اضافة الحركات للصور والنصوص (4,744 مشاهده)
جديد مواد مع عشوائي
التحويل التلقائي للحروف ل- ل- ه إلى اسم الجلالة0---- (2,360 مشاهده)
النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0---النسبة المئوية لا تظهر بالخط العربي & الشدة وألف المد في لفظ الجلالة0--- (1,776 مشاهده) ضبط خيارات اللغة فى الـ Microsoft Word0--- (2,190 مشاهده) استخدام لوحة المفاتيح في الـ Word0---- (2,383 مشاهده) إضافة كلمة سر إلي ملفات الورد دون استخدام برامج0--- (2,320 مشاهده) دمج المراسلات0-- (1,428 مشاهده) وضع صورة كخلفية للنص0-- (1,870 مشاهده) السماح للمستخدمين بتعديل أجزاء من ملف وورد محمي (Word2003)0--- (1,447 مشاهده) كتابة الأرقام الكسرية ورموز المعادلات0-- (2,057 مشاهده) درس كامل عن الدمج السهل من لوحة المفاتيح ف0-ي برنامج الـ Word (1,612 مشاهده) دورة الأكسس: الدرس السادس : منوعات في أكسيس .0--- (4,870 مشاهده) دورة الأكسيس : الدرس الرابع : العلاقات0---- (2,661 مشاهده) أساسيات في Access0--0 (2,376 مشاهده) تصميم تقرير لطباعة البيانات0---- (2,233 مشاهده) تصميم نموذج استعراض البيانات0--تصميم نموذج استعراض البيانات0-- (1,993 مشاهده) تصميم نموذج إدخال البيانات0--- (2,240 مشاهده) إنشاء قوائم خاصة باستخدام الماكرو(1)0-- (1,928 مشاهده) خطوات إنشاء الماكرو في تذييل النموذج (2)0-- (1,440 مشاهده) خطوات إنشاء الماكرو في تذييل النموذج (1)0- (1,510 مشاهده) استعلامات SQL في Access - تعديل الجداول وإضافة الحقول0- (2,102 مشاهده) استعلامات SQL في Access - تحديث البيانات الجدولية0-- (1,713 مشاهده) الاستعلامات الإجرائية -4 (استعلام الحذف)0--- (1,169 مشاهده) الاستعلامات الإجرائية -2 (استعلام الإلحاق)0--- (1,315 مشاهده) تصميم تقرير لطباعة الإجمالي0--- (1,420 مشاهده) استعلامات التحديد Select Query مع أمثله (1)0--- (1,876 مشاهده) |
دروس > البرمجة تحت وندوز بواسطة دوال ال win API > برمجة الويندوز باستخدام Win32 API function ( الدرس الخامس )
اعلانات في الموقع على جميع الصفحات
برمجة الويندوز باستخدام Win32 API function ( الدرس الخامس )
بسم الله الرحمن الرحيم
في هذا الدرس نستكمل الجزء الأخير من شرح برنامج الهيكل الرئيسي لنافذة الويندوز حيث يشمل هذا الجزء من الـ WinMain على تنفيذ الـmessage loop بواسطة الكود التالي:
((while(GetMessage(&msg, NULL, 0, 0
((TranslateMessage(&msg }
{ (DispatchMessage(&msg
وحتى نفهم تسلسل تنفيذ الـ message loop فإنه علينا ان نفهم متى تبدأ بالتنفيذ.
تبدأ الـ message loop بالتنفيذ حين يدرك نظام التشغيل (الويندوز) ان الـ queue الخاصة بهذا التطبيق استقبلت رسالة جديدة من المستخدم ففي هذه الحالة يقوم نظام التشغيل بإعطاء التحكم (control) إلى التطبيق لينفذ الرسالة ثم يعود التطبيق لإرسال الرسالة المستلمة من الـ queue إلى نظام التشغيل والسبب هنا كما ذكرناه سابقا وهو لعمل جدولة scheduling لتوقيت قراءة الرسائل في نظام التشغيل.
والآن نقرأ الكود السابق جزئياً:
(while(GetMessage(&msg, NULL, 0, 0
حلقة التكرار while السابقة تستمر بالتنفيذ طالما ان الدالة ( ) GetMessage مازالت ترجع قيمة غير الصفر والدالة ( ) GetMessage هي API function تقرأ الرسائل الموجودة في الـ queue الخاصة بالتطبيق وهذه الدالة لها متغيرين ..الأول هو عنوان المتغير الذي سبق وعرفناه من نوع MSG structure والمتحوي على معلومات عن الرسالة المستقبلة وعناصر الـMSG structure هي كالتالي :
}typedef struct
والمتغير الثالث والرابع لانحتاج لهما وعادة تُعبى بالصفر
وفي حالة كانت الـ message queue خالية من الرسائل فإن الدالة ( ) GetMessage ترجع صفر وهنا تتوقف حلقة التكرار ويعود التحكم ( control ) لنظام التشغيل ( الويندوز ) ...وبداخل حلقة التكرار السابقة نستخدم دالتين كلاهما API function الأولى هي:
(TranslateMessage(&msg
وهذه الدالة تسمح للمستخدم بعمل حدث من لوحة المفاتيح ..فكما هو معلوم عندما يقوم المستخدم بضغط زر على لوحة المفاتيح فإن قيمة الـ scan code للزر المضغوط هي المستقبلة في نظام التشغيل والدالة ( ) TranslateMessage هي المسئولة عن تحويل الرقم المستقبل من ضغطة الزر ( scan code ) إلى ( ascii code ) ولها متغير واحد فقط هو عنوان الرسالة الناتجة من الحدث.
(DispatchMessage(&msg
وبالنسبة للدالة ( ) DispatchMessage فإنها تعيد الرسالة التي تم إستقبالها في الدالة ( ) GetMessage إلى نظام التشغيل ( الويندوز ) كما تعيد التحكم ( control ) إلى نظام التشغيل ليقوم هو بعد ذلك بإرسال رسالة لتنفيذ الحدث للدالة ( ) WindowFunc والتي يُعد دائما الكود المراد تنفيذه و الحدث المطلوب يكتب في هذه الدالة.
والآن ننتقل لشرح الدالة الثانية في البرنامج وهي ( ) WindowFunc وهذه الدالة كما سبق ووضحت تشمل على switch statement تختبر بها الرسالة التي تصلها وعلى أساسها يتم تنفيذ الحدث المطلوب حسب ماراده المبرمج ويتم إستدعاء هذه الدالة من نظام التشغيل ( الويندوز ) والدالة هذه ليست دالة قياسية بمعنى انه يمكن للمبرمج تغيير اسمها كيفما شاء مع الحفاظ على القيمة المرجعة ونوعها والمتغيرات المرسلة.
(LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message,WPARAM wParam, LPARAM lParam
بالسطر السابق يبدأ تعريف الدالة ( ) WindowFunc وكما نلاحظ فإن لها قيمة مرجعة هي LRESULT وهي من نوع ( long integer ) كما ان لها calling convenrion من اشهر الأنواع الموجودة بالنظام وهو CALLBACK ويستخدم لإعلام المترجم ( compiler ) بأن هذه الدالة تم إستدعائها بواسطة نظام التشغيل وكما نلاحظ فهذه الدالة لها اربعة متغيرات هي كالتالي:
hwnd وهو كما سبق ووضحت handle للنافذة الحالية التي ننشأها.
message وهي الرسالة المستقبلة بالدالة.
wParam , lParam هذين المتغيرين يحتويان على معلومات إضافية عن الرسالة الخاصة بالتطبيق شاملة أرقام الـ scan code والـ ascii code وقيم أخرى لتحديد الزر المضغوط .
وبداخل الدالة ( ) WindowFunc كما وضحت يتم إختبار الرسالة ففي حالة برنامجنا فإن الوظيفة الوحيدة المستقبلة من لوحة المفاتيح هي عملية إغلاق النافذة والرسالة الناتجة عن ضغط الأزرار الخاصة بغلق النافذة من لوزحة المفاتيح هي WM_DESTROY ( اي في حالة ضغط المستخدم على ( Alt+F4 ))
} (switch(message
ففي حالة أردنا غلق النافذة فإن الدالة المستخدمة لهذا الحدث هي ( ) PostQuitMessage وهي دالة عند استدعئها تنتج لنا الرسالة WM_QUIT وترسلها للدالة( ) GetMessage الموجودة في الـWinMain وتسبب إنهاء البرنامج وإغلاقه.
(default : return DefWindowProc(hwnd, message, wParam, lParam
وفي حالة عدم ضغط المستخدم لأي زر على لوحة المفاتيح فإنه يتم عمل تمرير للدالة لنظام التشغيل ... كذلك في حالة رغبة المستخدم في إضافة أحداث للبرنامج فإن إضافتها تتم في الدالة ( ) WindowFunc بداخل الـ switch statement وليس في الـ WinMain .
وبالتالي نكون قد انتهينا من شرح الكود الخاص ببناء نافذة في نظام الويندوز وتقريبا هذا هو الجزء الذي أردت شرحه ... وبالله التوفيق درس برمجة الويندوز باستخدام Win32 API function ( الدرس الخامس )
أضف هذه المادة في موقعك:
مواد مشابهة:
|
||||||||||||||||||||||






