حتى تستطيع وندوز مخاطبة البرامج و حتى تستطيع النوافذ التخاطب مع بعضها و حتى تستطيع وندوز إخبار النوافذ بالأحداث التي تقع عليها من حركة الماوس أو النقر أو لتنفيذ أوامر كالنسخ و القص أو حتى إغلاق النافذة، أوجدت إمكانية إرسال الرسائل للنوافذ .
مثلاً حتى تغلق نافذة عليك إرسال رسالة الـ WM_CLOSE إلى النافذة المحددة و هذه النافذة ستقوم بإغلاق نفسها.
الدالات المستخدمة لإرسال الرسائل هما: PostMessage و SendMessage و الفرق بينهما هو أن الأولى سترسل الرسالة إلى طابور (رتل) الرسائل للنافذة المحددة بينما الثانية تنتظر معالجة الرسالة من قبل النافذة الهدف.
و الدالتان فيما عدى ذلك متشابهتان فما ينطبق على أحدهما ينطبق على الأخرى.
الدالة الأولى يتم تعريفها عبر:
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
بارامترات الدالة:
. hwnd مقبض النافذة التي تريد إرسال رسالة لها.
لجلب المقبض هذا هناك عدة حالات : 1) النافذة هي عنصر في برنامجك عندها المقبض يكون في خاصية النافذة (العنصر) المحدد CONTROLNAME.hwnd.
2) النافذة تقع خارج التطبيق :نستخدم البحث FindWindow إن كنا نعرف عنوان النافذة أو نستخدم FindWindowEX للبحث عن نافذة ابن داخل نافذة أب. إذا كنا نعرف اسم الـ Class للنافذة أو عنوانها.
. wMsg (متغير رقمي Long) الرسالة التي تريد إرسالها مثلاً WM_CLOSE انتبه يجب أن تكون قد أعلنت عن هذا الثابت و أسندت له قيمته الحقيقية Public Const WM_CLOSE =16.
إن كنت تريد استخدام رسائل خاصة بتطبيقك فيجب أن تكون قيمتها أكبر من قيمة الـ WM_USER و التي هي بالهيكس &H400 أو 1024 كقيمة رقمية.
. wParam بارامترات الأمر إن وجدت و إلا فأرسل صفراً 0.
. lParam بارامترات أخرى إضافية إن وجدت.
لا بد و أنك تستفسر ماهي الـ SubClassing .
إن ترجمناها حرفياً فهي التصنيف الفرعي و مبدأها بأن تعمل مقاطعة للرسائل التي يتم إرسالها إلى نوافذك و معالجتها و بالتالي ستحصل على تحكم أكبر بكثير و ستتجاوز محدودية الفيجوال بيسك في بعض الأمور، الطريقة ليست صعبة و لكن استعمالها محفوف بالمخاطر و ستعلم السبب لاحقاً .
في الدروس القادمة سنأخذ أمثلة عن إرسال الرسائل و ثم ننتقل إلى دالة جلب و تغيير شكل و خصائص نموذج SetWindowLong و GetWindowLong و أخيراً سنعطي طريقة الـ SubClassing لأنها ستعتمد على ما أعطيناه.
تحياتي