سؤال

أرغب في إنشاء نافذة أعلى مستوى أعلى (أي، وليس WS_CHILD) مع الشفافية. ومع ذلك، لا أريد أن أكون قناعا بسيطا، حيث يكون بكسل معين إما شفافة تماما أو غير شفافة تماما. وأنا لا أريد أن تكون مثل هذه النافذة بأكملها تحتوي على مستوى ألفا على ذلك. بدلا من ذلك، أود أن تكون النافذة شفافة بشكل أساسي تماما، مع مرسومة نقطية إلى قناة ألفا، بحيث يمزج الصورة النقطية مع كل ما قد يكون Windows وراءه. اللوحة

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

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

أعلم أن هذا يمكن القيام به، حيث أكدني الناس أنهم رأوا ذلك في برامج أخرى. أشعر أنني لا أفهم تماما شيئا بسيطا هنا حول طلاء النوافذ.

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

المحلول

ويندوز الطبقات (WS_EX_LAYERED) يجب القيام بهذه المهمة، مع الأخذ في الاعتبار أنه يجب عليك استخدام UpdateLayeredWindow() وتنسيق صورة نقطية غير عادية إلى حد ما (32 بت، ألفا مضروب مسبقا) لتحديد قيم ألفا لكل بكسل (SetLayeredWindowAttributes() لن يسمح لك فقط بتحديد قيمة ألفا واحدة للإطار الكامل أو مفتاح اللون).

أنت تقول أنك قد جربت هذا بالفعل - ما هي المشاكل التي واجهتها؟

نصائح أخرى

الطريقة الوحيدة التي أعرفها للحصول على Per-pixel Alpha على نافذة هي UpdateLayerEdWindow ().
تحقق من رابط msdn هذا: http://msdn.microsoft.com/en-us/library/ms997507.aspx.

لاحظ أنه عند استخدام Updatelayeredwindow، لا يحتاج التطبيق إلى الرد على WM_PAINT أو رسائل اللوحة الأخرى، لأنه قد قدم بالفعل التمثيل المرئي للنافذة وسيعتني النظام بتخزين تلك الصورة، مما يؤزهه، وتقديمه شاشة. UpdateLayerEdwindow هو قوي جدا، ولكن غالبا ما يتطلب تعديل طريقة رسم تطبيق Win32 موجود.

أراهن أن هذه هي القضايا التي كنت تعاني منها.

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