MFC   VC++   Visual Studio   Visual Studio   プログラミング

CHtmlViewのスクロールバー

 CHtmlViewはCView→CScrollView→CFormViewからの派生クラスで、WebBrowserコントロールの機能を提供するもので、WEBページに関する処理をする場合に便利なクラスです。

 しかし、実際に色々な処理をするにはMSHTMLやDOMを使わないといけなくて、結構面倒だったりします。
 そこで、今回は、スクロールバーを操作する方法を紹介したいと思います。

 このクラスは、CFormViewからの派生クラスなので、簡単にスクロールバーを操作出来そうな気がしますが、実際にWEBページが表示された時に見えているスクロールバーは、CHtmlViewのものではなくWebBrowserコントロールのものなので、操作や処理などが面倒なのです。

 といっても、わかってしまえば比較的楽で、下向きへスクロールさせるには以下のようになります。
    MSHTML::IHTMLDocument2Ptr pHtmlDoc = GetHtmlDocument();
    IDispatchPtr pDisp = pHtmlDoc->GetScript();
    MSHTML::IHTMLWindow2Ptr pWindow2 = pDisp;
    pWwindow2->scrollBy(0, 50);
 ※注: このコードではエラー処理などを入れていないので、実際に使う場合はきちんとチェックをしてください。
 このコードを見てわかるかもしれませんが、スクロールさせるのにWEBページに対してスクリプトを使っています。
 なので、ブラウザの設定でスクリプトを禁止していると動作しないかもしれません。(未確認)

 コードの説明については、それ程書くことはないのですが、「scrollBy」のところは、「scroll」や「scrollTo」などもあるので、用途によって使い分けて下さい。

 ここで、上記のコードを実行させるにあたり、現在位置の取得やスクロールできる範囲などを取得したい場合があると思います。
 その場合は、以下のようにして各値を取得出来ます。
    MSHTML::DispHTMLBodyPtr pBody = pHtmlDoc->body;
    pBody->scrollTop;    // 現在位置
    pBody->scrollHeight;    // スクロール範囲の高さ
    pBody->clientHeight;    // クライアント領域の高さ
 このように、スクロールバーの現在位置やスクロール範囲、クライアント領域の高さや幅、left座標、top座標など、いろいろ取得できます。
 例えば、下方向にスクロールさせる場合に、
    if(pBody.scrollTop < pBody.scrollHeight - pBody.clientHeight)
 としておけば、スクロールできる場合にのみ、処理をさせることが出来ます。
ランキングへ     posted by 遠雷 | Comment(0) | ビュー
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。