سؤال

لدي نافذة direct2d التي ترسم بشكل جيد عندما تكون في التركيز ؛ ومع ذلك ، عندما ينتقل التركيز إلى نافذة أخرى (نفس التطبيق أو آخر) ، تصبح النافذة بأكملها سوداء. لقد قمت بتعليق المشكلة وصولاً إلى استخدام ID2D1HwndRenderTarget::Clear. هذه الوظيفة أمر حيوي لتطبيقي كما بدونها ، تصبح اللوحة ... غريبة.

هل هناك طريقة يمكن أن ترسم نافذة Direct2D التي تركز على Un-Forged (ملاحظة: ملاحظة: WM_PAINT يتم استدعاؤه كالمعتاد ، كما هو Clear, BeginPaint, ، إلخ. كل شيء بدون خطأ)

شكرا لك مقدما.

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

المحلول

مع تجربتي مع DirectX ، إذا كانت الشاشة قد عادت إلى الوراء لأن DX فقدت الجهاز الذي كان "يرسمه". يحدث هذا كثيرًا - على سبيل المثال - عند التبديل بين نافذة DirectX على شاشة كاملة إلى تطبيق آخر ، والعكس صحيح.

لذا فإن ما عليك القيام به هو إعادة تحديد جهاز DX حتى يتمكن من استئناف عمليات الطلاء.

قد يساعد هذا أكثر من ذلك (وليس موقع الويب الخاص بي ، لكن بحث Google السريع قام برفعه)

http://www.programmersheaven.com/2/faq-directx-avoid-task-switching

نصائح أخرى

من MSDN ،

Handling Device Loss

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

يرجى التحقق من الرابط لمزيد من المعلومات. http://msdn.microsoft.com/en-us/library/ff684174(vs.85).aspx

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