سؤال

لقد نظرت إلى المواقع ووثائق MSDN ، لكنني ما زلت لا أفهم المعلمة الأخيرة من PostMessage ().

في المنتديات التي يسأل فيها الناس عن كيفية استخدام ما بعد الحدود ، يرد الأشخاص بأحد التطبيقات:

  1. postMessage (WindowHandle ، WM_Keydown ، KeyCode ، MapVirtualKey (keycode ، 0) << 16) ؛
  2. postMessage (WindowHandle ، WM_Keydown ، keycode ، 0) ؛

ماهو الفرق؟ لماذا يمكن ترك المعلمة الأخيرة على أنها 0 في بعض الحالات ، ولكن يجب أن تكون "تحول" وكل ذلك في حالات أخرى؟

مجرد سؤال سريع. لا تحتاج إلى ردود مقال (على الرغم من أنها ستكون موضع تقدير كبير). أي نظرة ثاقبة موضع تقدير. شكرا مقدما.

هل كانت مفيدة؟

المحلول

نرى هنا لمزيد من المعلومات حول postmessage. كل رسالة مختلفة ، ولديها مواصفات خاصة فيما يتعلق بالمعلمات المطلوبة. في كثير من النواحي ، يمكنك عرضها كدالة عامة باسم واحد (رسالة منشور) تنفد إلى وظيفة أخرى (اسم الرسالة) وتجاوزها تلك المعلمات.

المعلمة الأخيرة مثل الباقي هي رسالة محددة ويمكن أن تختلف.

BOOL PostMessage(
  __in  HWND hWnd,
  __in  UINT Msg,
  __in  WPARAM wParam,
  __in  LPARAM lParam
);

في رسالتك الأولى ، يحتاج Wm_keydown إلى نتيجة MapVirtualKey في LPARAM فقط في 16 بت. لم أعد أعاني من هذه الرسالة ، لكنني أظن أن ما يحدث هو أنه نظرًا لأن 0 يتم تمريره كمعلمة ثانية ، لا يوجد مفتاح افتراضي لمسح رمز (أو العكس) المطلوب ، ومع ذلك فإن رمز المفاتيح هو لا تزال هناك حاجة في الـ 16 بت من LPARAM

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top