CHtmlView: Wie scrollen ??
-
Hi,
also ich hab ein CHtmlView und zeige auf bestimmten Seiten eine Touchscreen-Tastatur an. Über die ist es u.a. möglich, die Seite hoch- und runterzuscrollen.
Mein Versuch:if (m_nScrollCnt < theApp.m_nHeight) { HRESULT hr; IDispatch *pDisp = NULL; IHTMLDocument2 *pHtmlDoc = NULL; IHTMLWindow2 *pHtmlWin = NULL; IHTMLElement *pHtmlBody = NULL; pDisp = GetHtmlDocument(); ASSERT(pDisp); hr = pDisp->QueryInterface(IID_IHTMLDocument2, reinterpret_cast<void**>(&pHtmlDoc)))) ASSERT(pHtmlDoc); pHtmlDoc->get_parentWindow(&pHtmlWin); m_nScrollCnt += 10; hr = pHtmlWin->scroll(0, m_nScrollCnt); HELPER_RELEASE(pHtmlWin); HELPER_RELEASE(pHtmlDoc); HELPER_RELEASE(pDisp); }
Es passiert aber nichts, gescrollt wird nicht. hr passt aber (S_OK) !
Wie kann ich ein Scrollen in meinem "Browser" realisieren ??
Ich bedanke mich schonmal für die Hilfe...
-
Hast du schon die "klassische" HTML-Variante des Scrollings probiert?
relative Links href="#position", und dann dorthin navigieren. Die Seite wird normalerweise nicht neu geladen.Dieses Verfahren funktioniert aber leider nur, wenn man selbst die Kontrolle über den Inhalt hat.
-
-
Guten Morgen und erstmal danke für die Antworten.
dwo77 schrieb:
Hast du schon die "klassische" HTML-Variante des Scrollings probiert?
relative Links href="#position", und dann dorthin navigieren. Die Seite wird normalerweise nicht neu geladen.Dieses Verfahren funktioniert aber leider nur, wenn man selbst die Kontrolle über den Inhalt hat.
Hm habe leider keine Kontrolle über den Inhalt. Kann es so nicht realisieren.
Werde mir den Link nochmal genauer anschauen. War schonmal auf der Seite, aber sehe es mir nochmal an.
EDIT: Ist mir gerade noch eingefallen: Habe es bereits so versucht wie im Link beschrieben, nur kriege ich keinen gültigen Pointer auf das IHtmlTextContainer-Interface !
Kriege E_NOINTERFACE zurück...
-
Also ich hab echt kein Plan, habe es noch einige Male versucht, es aber nicht gepackt.
Was mir schon unklar ist: Muss das Scrollen über die Interfaces geschehen oder über SetScrollPos usw. ?
Damit kriege ich es aber auch nicht hin...
-
Über das Interface. Iregndwas mit TopPosition oder so.
-
Ok, also definitiv erstmal über die Interfaces.
Gut.Folgender Code funktioniert grundsätzlich auf Seiten ohne Frames (sicherlich durch get_parentwindow):
HRESULT hr; IDispatch *pDisp = NULL; IHTMLDocument2 *pHtmlDoc = NULL; IHTMLWindow2 *pHtmlWin = NULL; try { pDisp = GetHtmlDocument(); ASSERT(pDisp); if (FAILED(hr = pDisp->QueryInterface(IID_IHTMLDocument2, reinterpret_cast<void**>(&pHtmlDoc)))) AfxThrowOleException(hr); ASSERT(pHtmlDoc); if (FAILED(hr = pHtmlDoc->get_parentWindow(&pHtmlWin))) AfxThrowOleException(hr); ASSERT(pHtmlWin); m_nScrollCnt += 50; hr = pHtmlWin->scrollTo(0, m_nScrollCnt); } catch (COleException *DispEx) { DispEx->Delete(); } HELPER_RELEASE(pHtmlWin); HELPER_RELEASE(pHtmlDoc); HELPER_RELEASE(pDisp);
So, jetzt muss man nur noch herausfinden, wie das auf Seiten mit Frames funzt...