ここから本文です

c#を勉強中です。 webbrowser の枠の大きさに合わせてサイトを縮小して表示したい...

sae********さん

2014/9/907:55:11

c#を勉強中です。
webbrowser の枠の大きさに合わせてサイトを縮小して表示したいんですけど、自力で方法を見つけることができませんでした。

どのようにすれば可能でしょうか?

閲覧数:
3,128
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

fun********さん

2014/9/1000:45:28

WebBrowserの表示の拡大縮小ですが
%で指定するのでWebBrowserのクライアントサイズ
に合わせて表示率を変更となると
面積(横のdot数 x 縦のdot数)で計算しなければならないとおもいます

デフォルトのWebBrowserのクライアントサイズが800x600とすると
面積は480000
それを1280x720に変更したとすると
面積は921600
拡大縮小率は サイズ変更後の面積 / デフォルトのサイズの面積

921600 / 48000 = 1.92 で 192%の拡大縮小率となります

実際の拡大縮小する処理ですが
よくネット上にあるWebBrowser.Document.Body.Styleを変更する方法ですと
テキストだけが拡大縮小されレイアウトが変になりますので
SHDocVw.dllを使用します

私の環境
Windows 8.1 Visual Studio Express 2013 for Windows Desktop
では上記3つの参照ですべて動作しました
またターゲットフレームワークは.Net 2.0で動作しましたので
古いVisual Studio(2005以降)なら動作すると思われます
ただすべての環境をテストできるわけでないので
動作出来ない場合があることはご了承ください

フォームアプリケーションのプロジェクトを新規作成
SHDocVwの参照の追加
COMタブ Microsoft Internet Controls(ieframe.dll) 名前空間名 SHDocVw
C:\Windows\System32\shdocvw.dll
C:\Windows\SysWOW64\shdocvw.dll
のいずれか環境に合わせて参照の追加を行ってください

デザインにてWebBrowserをフォームに設置
WebBrowser.Dockをfillに設定
WebBrowserのイベントClientSizeChangedを追加
※初期のWebBrowserのクライアントサイズを表示率100%としているので
デザインでフォームのサイズをあらかじめ調整しておいてください

public partial class Form1 : Form
{
Size defaultSize;
float defaultArea;
public Form1()
{
InitializeComponent();
// WebBrowserの初期のクライアントサイズを保存(拡大縮小率計算用)
defaultSize = webBrowser1.ClientSize;
defaultArea = defaultSize.Width * defaultSize.Height;
webBrowser1.Navigate("http://www.yahoo.co.jp/");
}

private void webBrowser1_ClientSizeChanged(object sender, EventArgs e)
{
// WebBrowserのクライアントサイズが変更されたので
// 初期のクライアントサイズと現在のクライアントサイズで拡大縮小率を計算
float nowArea = webBrowser1.Size.Width * webBrowser1.Size.Height;
int rate = (int)((nowArea / defaultArea) * 100);

if( webBrowser1.Document != null)
{
// 先ほど求めた拡大縮小率で表示率を変更
((SHDocVw.WebBrowser)webBrowser1.ActiveXInstance).ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, rate, IntPtr.Zero);
}
}
}
}

参考になれば幸いです

  • 質問者

    sae********さん

    2014/9/1105:31:17

    ご返答ありがとうございます。
    早速やってみようとしたのですが、いきなり下記の部分でつまづきました。

    >SHDocVwの参照の追加
    >COMタブ Microsoft Internet Controls(ieframe.dll) 名前空間名 SHDocVw
    >C:\Windows\System32\shdocvw.dll
    >C:\Windows\SysWOW64\shdocvw.dll
    >のいずれか環境に合わせて参照の追加を行ってください

    1.COMタブとはどこにあるのでしょうか?
    2.shdocvw.dllは環境によって片方しかないのかと思ったらどちらも存在しました。64bitPCの場合は後者ということでしょうか?

    以上2点の疑問点について、よろしくお願い致します。

  • その他の返信を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2014/9/16 06:48:21

降参 ありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる