سؤال

لدي مربع حوار MFC غير المشروط هذا والذي يتضمن عنصر تحكم في متصفح الويب Internet Explorer.

السيطرة مشتقة مباشرة من CWnd باستخدام أغلفة ActiveX التي تم إنشاؤها بواسطة Visual Studio، وقمت بتعيينها إلى ملف CDialog باستخدام فقط أ DDX_Control(pDX, IDC_EXPLORER, m_explorer);.

لدي مشكلتين.

المشكلة رقم 1:

نظرًا لكوني عديم النموذج، أبدأ الحوار وأوقفه حسب رغبتي باستخدام new/Create()، ثم DestroyWindow()/delete(in PostNcDestroy).

تبدأ المشكلة عندما يبدأ عنصر تحكم IE في تحميل فيديو Flash (أشياء عادية على YouTube):عندما يغلق أحدها، مما يؤدي إلى تدمير مربع الحوار، يستمر تحميل الفيديو!الحق حتى التخزين المؤقت بالكامل.لا يزال مؤشر ترابط Flash ActiveX قائمًا ويستمر في العمل حتى بعد مرور مربع الحوار الأصلي بـ PostNcDestroy وتم تحرير كل الذاكرة.

ما يجب القيام به؟كيف يمكنك حقًا "قتل" التحكم في الويب الخاص بالطفل وجميع خيوطه؟

المشكلة رقم 2:

يغطي التحكم في متصفح الويب كامل مساحة مربع الحوار.لا أستطيع اعتراض أي OnMouseMove() - في مربع حوار الوالدين أو في فئة تعيين متصفح الويب!ما يعطي؟

شكرًا!


"تنظيف"

"احذف هذا" في PostNcDestroy() - واستدعاء الوظيفة الأساسية بالطبع.هل يجب أن يكون أكثر؟ماذا؟ألا ينبغي للحوار أن يعتني بأبنائه برشاقة؟

لقد حاولت الاتصال بشكل صريح بـ DestroyWindow على عنصر تحكم الويب، أو إرسال/نشر رسائل له مثل WM_DESTROY، وWM_CLOSE، وحتى WM_QUIT - ولكن لا شيء - نفس الصفقة.

المشكلة رقم 2:

لا، مثل المسافة البادئة، يأخذ عنصر التحكم كل المساحة وهو في الأعلى، لذا أعتقد أن أي إجراء بالماوس لا يتم نقله "أدناه" :)؟ولكن لماذا لا يتم استدعاء OnMouseMove الخاص به؟لأنه يذهب مباشرة من CWnd؟أنا تائه...

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

المحلول

المشكلة 1) حاول myBrowser.navigate("about:blank") قبل تدمير النافذة.

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