2003-01-09 117432 [長年日記]

IWebBrowser2のスクロール

スペースバー(キー自体はカスタマイズ可能)でスクロールし、最後までスクロールしたら次のメッセージに進むという機能がありますが、あれの実装です。問題はWebBrowserコントロールのスクロールの仕方と、現在のスクロール位置の取得の方法です。スクロールの方は、IWebBrowser2 -> IHTMLDocument2 -> IHTMLWindowと取得してscrollByメソッドなどを使えば何とかなりそうですが、IHTMLWindowからは現在のスクロール位置が取得できません。調べてみたところ、IWebBrowser2 -> IHTMLDocument2と取得し、IHTMLDocument2::get_bodyを呼び出してボディのIHTMLElementを取得します。で、ここからIHTMLElement2をQueryInterfaceして、IHTMLElement2::get_scrollHeight、get_clientHeight、get_scrollTopを呼び出すと、それぞれスクロール可能な高さ、クライアント領域の高さ、現在のスクロール位置が取得できるようです。スクロール自体は、IHTMLElement2::doScrollを使うのが便利そうです(スクロールバーをクリックしたのをシミュレートしてくれます)。

しかし、まだ試していませんが、フレームを使ったページだとうまくいかなそうですね。