تعيين التركيز على MSHTML جزءا لا يتجزأ من

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

  •  08-07-2019
  •  | 
  •  

سؤال

في طلبي لدي عنصر تحكم MSHTML المضمنة. المشكلة هي أنني لا يمكن تعيين التركيز إلى عنصر التحكم هذا. استطيع ان اضغط، حدد، وأزرار دفع الخ، لكنه لن يقبل مدخلات لوحة المفاتيح والماوس عجلة الإخطارات نتيجة لذلك. حتى اليسار النقرات على السيطرة لا تضع التركيز. (ويرتبط السؤال إلى هذه المسألة. )

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

HWND iehwnd = ::FindWindowEx (m_oleObjectHWND, NULL, 
     L"Shell DocObject View", NULL);
if(iehwnd != NULL)
{
    iehwnd = ::FindWindowEx (iehwnd, NULL, L"Internet Explorer_Server", NULL);
    if(iehwnd != NULL)
    {
        ::PostMessage(iehwnd, WM_SETFOCUS, (WPARAM)GetHWND(), NULL);
    }
}

وعن طريق Winspector، جعلوني متأكد من أن الرسائل جاءت من خلال نافذة التحكم، ولكن يبدو أن نتجاهلها.

والثاني هو استدعاء الأسلوب التركيز () من IHtmlWindow2.

    IHTMLDocument2* pHTMLDoc2 = NULL;
    m_webBrowser->get_Document((IDispatch**)&pHTMLDoc2);

    IHTMLWindow2* pWindow = 0;
    pHTMLDoc2->get_parentWindow(&pWindow);
    pWindow->focus();

وهذه المرة، وأحصل على E_FAIL من التركيز ().

وMSDN يقول قد يفشل الاتصال عندما يتم تحميل الوثيقة، ولكن pHTMLDoc2-> get_readyState () بإرجاع "إكمال". لذلك هذا ليس هو الحال.

والثالث: هو فعل الفعل UIACTIVATE.

    hret = m_oleObject->DoVerb(OLEIVERB_UIACTIVATE, NULL, 
        clientSite, 0, (HWND)GetHWND(), &posRect);

ويبدو أن هذا يحقق شيئا.

والرابع وتدعو التركيز () من IHtmlDocument4.

    IDispatch* pdisp = NULL;
    m_webBrowser->get_Document((IDispatch**)&pdisp);

    IHTMLDocument4* pHTMLDoc4 = NULL;
    pdisp->QueryInterface(IID_IHTMLDocument4, (void**)(&pHTMLDoc4));

    pHTMLDoc4->focus();

هل لا شيء.

وقضيت يوم كامل على هذا الفعل ومعرفة الروابط غوغل عن ظهر قلب الآن :) تأمل في الحصول على إشارة من الخبراء.

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

المحلول

وأخيرا وجدت.

وهذه الوظيفة في قانون بلدي (أو بالأحرى المكون IEHtmlWin للمكتبة كويدغيتس) عادت S_FALSE. لقد غيرت رمز الإرجاع إلى S_OK - وفويلا ...

وHRESULT FS_IOleInPlaceSiteWindowless :: RequestUIActivate () {     عودة S_OK. }

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