質問: c#を勉強中です。 webbrowser の枠の大きさに合わせてサイトを縮小して表示したいんですけど、自力で方法を見つけることができませんでした。 どのようにすれば可能でしょうか?
回答: 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(""); } 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); } } } } 参考になれば幸いです