إضافة نقر/انقر نقرًا مزدوجًا على الأحداث إلى أدوات التحكم في مربع المجموعة الثابتة

StackOverflow https://stackoverflow.com/questions/2541714

سؤال

بعد أن أدركت أن أسبابي الخاصة كانت مشكوك فيها للغاية ، لقد ذهبت الآن إلى هذا بطريقة مختلفة. لكني ما زلت فضولي ...

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

هل هناك أي سبب لا يمكنني الحصول على معالج الأحداث للعمل من أجل نقرات على مربع مجموعتي بنفس الطريقة التي يمكنني القيام بذلك من أجل العنصر الثابت النص البسيط؟ لا يوجد قدر من النقر فوق أو بالقرب من عنصر التحكم يطلق الحدث.

ملاحظة - لقد قرأت من خلال http://www.codeproject.com/kb/static/staticctrl_tut.aspx وحاولت الرد على كل من ON_STN _... الأحداث و ON_BN _... الرسائل ، قم بإعداد نمط الإخطار (يظهر BS_NOTIFY في ملف RC) ... وما زلت أفتقد شيئًا - ما هو؟ هل هذا ممكن؟ يقترح معظم ما قمت به googled أنه ... ولكن بدون إجابات واضحة لـ C ++/MFC.

منذ نشر هذا السؤال لأول مرة ، وجدت إشارة إلى رسالة WM_NCHITTEST ، وتلميح أنه يتعين عليك إنشاء معالج لهذه الرسالة لتجاوز السلوك الافتراضي لمربع المجموعة للاستجابة باستخدام HT_Transparent ... على الرغم من وجود خاصية شفافة في مجموعة ClassWizard لخطأ. أمم. هل يمكن لأي شخص أن يؤكد أن هذا هو المفتاح بالفعل؟

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

المحلول

أعتقد أن wm_nchhittest/ht_transparent هو بالفعل المفتاح هنا.

تعد مربعات المجموعة نوعًا غريبًا من التحكم: في حين يبدو أنها تحتوي على عناصر تحكم أخرى ، إلا أنها في الواقع أشقاء من عناصر التحكم في شجرة HWND. لذا فإن صندوق المجموعة الذي يبدو أنه يحتوي على زرين هو في الواقع شقيق لتلك الأزرار - ويمكن أن يأتي قبل أو بعده في التسلسل الهرمي HWND.

تستجيب مربعات المجموعة إلى WM_NCHITTEST مع HT_TRANSPARENT ، بحيث تنقر الفأر مباشرة من خلالها. تتمثل إحدى فائدة ذلك في أنه لا يهم ما إذا كان مربع المجموعة يأتي قبل أو بعد عناصر التحكم التي يبدو أنها تحتوي على ترتيب النافذة ؛ ستنتهي النقرات إلى تلك الضوابط ، وليس مجموعة المجموعة.

للحصول على النقر المزدوج (أو مجرد نقر عادي) على مجموعة المجموعة للعمل ، ستحتاج إلى القيام شيئين:

  • تجاوز سلوك WM_NCHITTEST الافتراضي وإرجاع HT_CLIENT بدلاً من ذلك ، مثل عنصر تحكم منتظم
  • ; ؛ في هذه المرحلة ، يجب أن يكون قادرًا على الحصول على wm_lbuttondown والأحداث ذات الصلة التي كانت ستذهب إلى مكان آخر (إلى الأخ ، أو إلى مربع الحوار نفسه).
  • تأكد من أن محتويات مجموعة المجموعة تأتي * قبل * في ترتيب HWND ، بحيث لم تعد تعتمد على النقرات "من خلال" مجموعة المجموعة. (على الأقل أعتقد أنك تريد أن يكونوا من قبل ؛ في كلتا الحالتين ، قد تحتاج إلى اللعب مع طلب HWND الآن بعد أن أصبح مهمًا مرة أخرى.)

لاحظ أن هذا نوع مختلف من الشفافية مرة أخرى من WS_EX_TRANSPARENT ، وهو ما قد يكون هو خرائط خاصية معالج الفئة الشفافة إلى. مبسطة بشكل صارخ ، ht_transparent له علاقة بالشفافية للماوس ؛ WS_EX_TRANSPARENT يدور حول الرسم في النهاية حتى يظهر الأشقاء "من خلال".

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