هل هناك أي طريقة لإصلاح التأثير الجانبي لـ "DwmEnableBlurBehindWindow" في VC6.0؟

لقد التقيت بالضبط بالمشكلة التي تم تحديدها في موضوع MSDN: DWM Blur Behind Overview </أ>.

بعد أن تم استدعاء DwmEnableBlurBehindWindow ، أصبحت منطقة العميل زجاج جميل ، ولكن للأسف ، أصبح كل النص الأسود على عناصر التحكم (الأزرار ، EDITs ، STATICs الخ) شفافة أيضا ، تماما مثل ذلك

موضوع على MSDN .

هل يوجد طريقه لاصلاح هذا؟

بالمناسبة ، بلدي تطوير env هو VC ++ 6.0 ، ولا بد لي من رسم بعض النص متوهجة مع API DrawThemeTextEx ، لذلك لا أستطيع استخدام DwmExtendFrameIntoClientArea بشكل بسيط. يجب أن استخدم DwmEnableBlurBehindhind لتمكين التأثير الزجاجي لمنطقة العميل.

شكرا جزيلا!

2012/06/19 تحديث: عن طريق تغيير لون مفتاح TRANSPARENT من نافذة إلى لون غير أسود مع "SetLayeredWindowAttributes" ، ثم استخدام "DwmExtendFrameIntoClientArea" يمكن حل مشكلة نص التسمية التوضيحية من CONTROLS (أزرار ، EDITs الخ) على النافذة الزجاجية.

ولكن بهذه الطريقة ، "DrawThemeTextEx" لا يمكن أن تعمل بشكل صحيح. يبدو أن DrawThemeTextEx يمكن فقط استخدام RGB (0،0،0) كـ لون مفتاح TRANSPARENT.

لذا ، هل هناك أي API يمكن تغيير لون TRANSPARENT KEY الذي يستخدمه "DrawThemeTextEx" داخل؟

هدفي النهائي هو رسم بعض النص المتوهج على إطار زجاجي (Aero) بدون تأثيرات جانبية "DwmEnableBlurBehindWindow" التي تم تحديدها في موضوع MSDN: DWM Blur Behind Overview ، http: //msdn.microsoft.com/en-us/library /aa969537.aspx. وإذا كان هناك طريقة أخرى للقيام بذلك ، أنا سعيد جدا لسماع :)

وشكرا جزيلا ، مرة أخرى! :)

0
السبب الذي طرحته VC6 هو أنني يجب أن أستخدم واجهات برمجة تطبيقات DWM بطريقة ديناميكية. و MSDEV بأكملها ليس بنفس السهولة لاستخدام VS2008 أو أحدث.
وأضاف المؤلف Jimson, مصدر
نعم ، لقد اخترت لون مفتاح شفاف: RGB (200 ، 201 ، 202) لجعل كل النص معروض بشكل صحيح على عناصر التحكم. ولكن في نفس الوقت ، "DrawThemeTextEx" لا يمكن أن تعمل بشكل صحيح. وأنا استنفدت حقا ..... هدفي هو جعل "DrawThemeTextEx" و "DwmExtendFrameIntoClientArea" يعمل بشكل جيد في نفس الوقت. :(
وأضاف المؤلف Jimson, مصدر
VC6 ليس له علاقة به ، تستخدم عناصر التحكم الشائعة GDI و GDI لا يدعم قناة ألفا ...
وأضاف المؤلف Anders, مصدر
استخدام مفتاح اللون ليس هو طريقة الانتقال إلى IMHO نظرًا لأنك تحتاج إلى اختيار لون ليس جزءًا من المظهر/VS ولا يتم استخدامه في أي رسومات/رموز قد يكون لديك ...
وأضاف المؤلف Anders, مصدر
وإذا كان لون نظام النص هو RGB (200 ، 201 ، 202)؟
وأضاف المؤلف Anders, مصدر

1 إجابة

ألق نظرة على Painting عنوان التسمية التوضيحية في MSDN:

ابحث عن السطر HBITMAP hbmOld = (HBITMAP) SelectObject (hdcPaint، hbm)؛ في المثال.

ثم أضف هذا السطر بعده:

// You should have set RGB(200,201,202) as the transparency key
FillRect(hdcPaint,&rcClient,CreateSolidBrush(RGB(200,201,202)));

على الرغم من أن التأثير لا يبدو مثاليًا ، إلا أنه يحل المشكلة.

Reference: C++ WinAPI Conflict between SetLayeredWindowAttributes and BitBlt

0
وأضاف