خلفية زجاجية إيرو مكسورة بعد السبات.كيف يمكنني حل هذا؟

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

  •  13-11-2019
  •  | 
  •  

سؤال

أنا أقدم برنامجا في C # .NET 3.5 WPF. يجب أن تعمل على نظام التشغيل Windows XP و Windows Vista و Windows 7. على أنظمة التشغيل الأحدث التي أتيح بها لإنشاء الخلفية في زجاج Aero. لذلك هذا مجرد تصميم خاص. بعد السبات، بعد تعليق أو بعد تغيير نظام Windows إلى تصميم أساسي والعودة إلى Aero، يتم عرض جميع الزجاج المضافة أسود تماما.

أعرض الزجاج عبر فئة Glasshelper (يمكن العثور عليها مع Google).

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

لذلك كان لدي فكرة إغلاق النافذة في كل مرة، يتم تقليلها وإعادة البناء بالكامل، عندما تستخدم في المرة القادمة.

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

الآن أرى بطرق:

1) أقول النافذة في كل مرة، يعلق الكمبيوتر أو سباتات أو تغيير التصميم. وأنا أفتحها النافذة مرة أخرى، عندما يتم حفظها. ولكن كيف يمكنني التعامل مع هذا؟

2) أقبل، سيتم عرض النافذة باللون الأسود، حتى يقلل من ذلك. (ليس المفضل لدي) ولكن بعد ذلك أحصل على مشكلة جديدة: الزر في شريط المهام. (وليس أيقونة الدرج). أحتاج إلى عرضها بشكل دائم. على ويندوز إكس بي أحتاجها لفتح النافذة، عند التقليل منها. وخاصة على Win7 أحتاج إليها لأنني أريد استخدام بعض المزايا الجديدة من SuperBar! (إن معاينة Hovering لن تكون النافذة، ستكون صورة ثابتة.)

شكرا لكم الجميع، لمساعدتي!

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

المحلول 2

حسنا، شكرا للجميع!لكنني أعتقد أنني وجدت الحل الخاص بي!

أعالج الرسائل: WM_DWMCOMPOTIGNECHANGED (0x031e) & wm_themechanged (0x031a)

وعلى التقاط إحدى هذه الرسائل، أقوم ببساطة بتعيين الزجاج مرة أخرى أو خلفية جديدة اعتمادا على dwmiscompositionEnabled ().

في الواقع لدي شيء مشابه لما يلي: giveacodicetagpre.

أحصل على hwnd.

أنا ربط ذلك. giveacodicetagpre.

أجعل خلفية نافذة WPF شفافة، لأنه في وقت لاحق، في وظيفة WNDProC، سأكون قادرا إلا الوصول إلى خلفية HWND (WIN32). giveacodicetagpre.

والآن يجب علي فقط تعيين النمط لأول مرة: giveacodicetagpre.

هذا!يعمل بشكل مثالي بالنسبة لي (WIN 64 Home Premium) بعد تعطيل أو تمكين Aero، قم بالتبديل بين مختلف أنماط إيرو أو غير Aero أو السبات، لذلك هو بالضبط، ما كنت أبحث عنه.شكرا لك، لأفكارك العظيمة!

نصائح أخرى

حاول التعامل مع رسالة WM_NCCALCSIZE وتقليل منطقة العميل (nccalcsize_params.rgrc0) بواسطة بكسل واحد.أنا جادة.لقد وجدت أن هذا الحل يستخدم في Google Chrome ويعمل بشكل جيد بالنسبة لي أيضا.

قد ترغب في إلقاء نظرة على مكتبة تكامل شل WPF . يمكنني إعادة التذكر أن هناك مشاكل مماثلة في تلك المكتبة نظرا لعلة في إدارة نافذة سطح المكتب في نظام التشغيل Windows 7. تحتوي المكتبة على مصدرها متاحا حتى تتمكن من إلقاء نظرة على كيفية التعامل معها.

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