نافذة Direct2D أسود عندما لا تكون في التركيز
سؤال
لدي نافذة 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