Frage

Ich erstelle ein IE-Erweiterung (VS2008 verwenden, C ++), der muss auf reagieren Ereignisse Scrollbar in IE. Ich verwende BHO dafür, und ich habe Zugang zu IWebBrowser2 Elemente, IHTMLDocument2 Element und HWND des übergeordneten Fensters. Ich kann nicht herausfinden, wie die Bildlaufleisten zugreifen zu können. Ich habe Codes gesehen, dass mir erlaubt, die Bildlaufleiste zu behandeln, sobald ich den Zugang zu ihnen haben, aber nicht, wie die Scrollbar Objekte zu erhalten (oder sind sie untergeordnete Fenster des IE-Fenster?) Selbst. Irgendwelche Ideen?

War es hilfreich?

Lösung 3

Siehe dieses Thread für die Antworten. Mein Problem und die richtige Antwort ist richtig hier beschrieben worden ist.

Andere Tipps

MSHTML macht seine eigene Bildlaufleisten anstelle der nativen Systemsteuerungen verwenden. Aus diesem Grund können Sie CSS-Regeln für sie gelten.

Was ich versuchen würde, ist:

  1. Query-Interface () die IHTMLDocument2 Objekt für IHTMLElement.
  2. Query-Interface (), dass für IConnectionPointContainer.
  3. Dann rufen IConnectionPointContainer :: Findconnectionpoint (DIID_HTMLElementEvents2).
  4. Implement IDispatch :: Invoke () und Sie sollten die OnScroll Ereignis, wenn jemand scrollt die Dokument.
  5. Spülen und wiederholen Sie für Unterrahmen.

Da habe ich IDispatchImpl bereits umgesetzt, ich vermute, ich würde die ATL Implementierung der IDispatch haben außer Kraft zu setzen :: Invoke Methode Ereignisse zu behandeln. Ist es richtig? Wenn das der Fall ist, und ich habe Waschbecken Einträge mit DIID_DWebBrowserEvents2, wie würde das betroffen sein? Hier ist, wie meine Klasse wie folgt aussieht:

class ATL_NO_VTABLE CHelloWorldBHO :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CHelloWorldBHO, &CLSID_HelloWorldBHO>,
    public IObjectWithSiteImpl<CHelloWorldBHO>,
    public IDispatchImpl<IHelloWorldBHO, &IID_IHelloWorldBHO, &LIBID_HelloWorldLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
    public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2, &LIBID_SHDocVw, 1, 1>
{
.
.
.
BEGIN_SINK_MAP(CHelloWorldBHO)
     SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)
     SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, BeforeNavigate2)//Handle BeforeNavigate2
END_SINK_MAP()
.
.
.
}

Danke

Edit: Ich entdeckte, dass, wenn Invoke Überschrieben wird OnDocumentComplete nie genannt. Wie kann ich dieses Problem umgehen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top