عند البرمجة ضمن Windows، غالبًا ما نجد أن هناك العديد من الوظائف التي قام نظام Windows بتنفيذها بالفعل، إذا كان من الممكن استدعاؤها مباشرة، فيمكنها توفير الكثير من كتابة البرامج وتحسين كفاءة تشغيل البرنامج. في كثير من الحالات، يمكننا استخدام "Ctrl +" إن القدرة على استدعاء وظائف النظام هذه في برنامج ما يلغي الحاجة إلى القلق بشأن كيفية تنفيذ هذه العمليات. بعد الاستكشاف المستمر، وجدت أخيرًا أن SendMessage وPostMessage يمكن أن يتولىا هذه المهمة المهمة، لذلك لا أستطيع الانتظار حتى أقدمهما لجميع أصدقائي.
يمكن العثور بسهولة على هاتين الوظيفتين لواجهة برمجة التطبيقات (API) باستخدام "متصفح API" الخاص بـ VB5:
DeclareFunctionSendMessageLib "user32" الاسم المستعار "SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_lParamAsAny)AsLong
DeclareFunctionPostMessageLib "user32" الاسم المستعار "PostMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_ByVallParamAsLong)AsLong
وظائف هاتين الوظيفتين متماثلة تقريبًا، باستثناء أن SendMessage يستدعي وظيفة Windows مباشرة لإرسال الرسالة، وترجع هذه الوظيفة فقط بعد معالجة الرسالة بالكامل، بينما يضيف PostMessage رسالة إلى قائمة انتظار الرسائل الخاصة بهذه الرسالة سيتم التعامل معها أثناء التعامل مع الأحداث العادية في وقت ما في المستقبل. ما يلي يأخذ SendMessage كمثال فقط.
على الرغم من وجود أربع معلمات في الدالة، إلا أن المعلمات الرئيسية هي المعلمتان الأوليان: hwnd وwMsg. Hwnd هو مؤشر. يحتوي كل نموذج وعنصر تحكم في تطبيق Microsoft Windows على مؤشر. يمكن أن يشير المقبض إلى كائن العملية الخاص بالوظيفة؛ وwMsg هو رقم سداسي عشري يمثل الرسالة المحددة التي سيتم إرسالها بواسطة الوظيفة.
يستخدم ما يلي أمثلة محددة لتوضيح كيفية استخدام SendMessage لتنفيذ وظائف "القص" و"النسخ" و"اللصق" و"التراجع" و"الحذف":
ضع مربع نص Text1 وخمسة أزرار في النموذج لأداء الوظائف الخمس المذكورة أعلاه على التوالي، واكتب البرنامج التالي.
خيار صريح
PRivateDeclareFunctionSendMessageLib "user32" الاسم المستعار "SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
ConstWM_CUT=&H300
ConstWM_COPY=&H301
ConstWM_PAST=&H302
ConstWM_CLEAR=&H303
ConstWM_UNDO=&H304
DimfbAsLong
PrivateSubcmdClear_Click()
fb=PostMessage(Text1.hwnd,WM_CLEAR,0,0)
EndSub
PrivateSubcmdCopy_Click()
fb=SendMessage(Text1.hwnd,WM_COPY,0,0)
EndSub
PrivateSubcmdCut_Click()
fb=SendMessage(Text1.hwnd,WM_CUT,0,0)
EndSub
PrivateSubcmdPast_Click()
fb=SendMessage(Text1.hwnd,WM_PAST,0,0)
EndSub
PrivateSubcmdUndo_Click()
fb=SendMessage(Text1.hwnd,WM_UNDO,0,0)
EndSub
بالإضافة إلى TextBox، يمكن أن يعمل SendMessage أيضًا على RitchTextBox وComboBox، وما إلى ذلك، طالما تم تغيير المعلمة hwnd وفقًا لذلك. ->