كيف يمكنني الحصول على مربع حوار Windows شفاف ورسم بدائل للبقاء على رأس النافذة التي ترسم الفيديو المتدفق؟

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

سؤال

لديّ عنصر تحكم ActiveX يحتوي على نافذة واحدة تحتوي على مقطع فيديو يتم سحبه إليه. لديّ مربع حوار منفصل أقوم بإنشائه في نافذة أخرى صنعتها شفافة أو شبه شفافة بطرق مختلفة (أي باستخدام setlayeredwindowattributes (...) جنبًا منشأه).

بالإضافة إلى ذلك ، حاولت استخدام طرق مختلفة لمحاولة الحصول على النافذة لحوار الحوار دائمًا على رأس نافذة الفيديو المتدفقة ، لكن لم يثبت أي منها أن يعمل بالنسبة لي. إذا كان لدي زر في مربع الحوار أو ارسم على السطح الشفاف مع مكالمات Lineto (...) لا تظل على رأس الفيديو. لقد حاولت استخدام SetWindowPos للتأثير على Z-order لنظام التشغيل Windows وحاولت أيضًا تغيير خصائص نافذة الحوار مثل "أعلى" ولكن دون جدوى.

هل حاول أي شخص أن يفعل شيئًا كهذا من أجل نافذة مغطاة على بث الفيديو وحصل على طلب Z للعمل في طلاء النافذة الأمامية دائمًا بعد الفيديو المتدفق؟

تحديث: 02/10/10 - حاول باستخدام خاصية WS_EX_Layered مع SetLayeredWindowAttributes (...) باستخدام LWA_COLORKEY وحقق ما كنت أبحث عنه. نظرًا لأنه لا يمكن استخدام الخاصية ذات الطبقات باستخدام نمط WS_CHILD ، فإن هذا الحل يجلب معه بعض الإدارة المطلوبة لموضع نافذة التراكب فيما يتعلق بالنافذة مع الفيديو. بالإضافة إلى ذلك ، هناك بعض الشذوذات الأخرى التي أحاول القضاء عليها. على سبيل المثال ، عندما يتم تضمين نافذة التحكم ActiveX مع الفيديو في علامة تبويب IE وأتبول إلى عناصر تحكم علامة تبويب أخرى في نافذة التراكب ، تظل في أعلى علامة التبويب الجديدة (عند استخدام نمط WS_POPUP). لا تزال التحقيق في ما إذا كانت هناك وسيلة بديلة للتعامل مع هذا الآخر ثم تحديد المفتاح وإخفاء نافذة نافذة.

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

المحلول 2

خاصية WS_EX_Layered مع SetLayeredWindowAttributes (...) باستخدام LWA_ColorKey سيحقق الشفافية حيث يتم استخدام ColorKey. يبقى تراكب Transpaerent أمام الفيديو ويبقى فيديو البث النشط مباشرًا. لا يمكن استخدام نمط WS_CHILD باستخدام النمط الطبقات وبالتالي يتطلب وضع النافذة إدارة إضافية إذا تم استخدام WS_POPUP. قد تنشأ مشكلات إضافية من عدم القدرة على التراكب كنافذة طفل. -انظر التحديث Q.

نصائح أخرى

قد لا يكون هذا ممكنًا ، حيث يستخدم الكثير من رمز إخراج الفيديو تراكب الأجهزة ، لذا إذا كانت نافذتك في المقدمة ، فإن التراكب إما لن يعمل ، أو لن يرسم المكان الذي توجد فيه وحدات البكسل على الإطلاق.

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

في تجربتي ، عادة ما يكون التراكب بتنسيق YUV بدلاً من RGB لأن العديد من تنسيقات ضغط الفيديو تعتمد على YUV. لذا ، تحصل أجهزة الفيديو على بعض وحدات البكسل من صورة YUV وليس من المخزن المؤقت للشاشة ، لذلك لا يمكنك التأثير على هذه البكسلات ما لم تحصل على إدراج نفسك في مسار رمز العرض في دفق الفيديو.

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