世紀末の墓

世紀末の墓

IT系寄りの雑記

webブラウザを自作したい!(1)

今回はC#を用いてwebブラウザを作りたいと思います。
進捗があがり次第記事を書いていく形になると思いますし、完成形は考えて無いので(n)まで続きます。(どこまで続くかわからない)

それと、何故作るかというと...........作りたいからです。(理由はいらないですね)

基盤を作る

(1)なのでとりあえずは基盤というか、そんな感じのモノを作る。

今回作ったのは、実行したらgoogleに繋がるだけの代物。
UIなんて気にするな。↓の感じで。

f:id:silmin:20170801212856p:plain

タイトルバーの下のスペースはアドレスバーとか入れようかなって思って空けた。

ソースコード

using System;
using System.Drawing;
using System.Windows.Forms;

namespace Webbrowser
{
    class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run( new Browser() );
        }
    }

    class Browser : Form
    {
        WebBrowser browser;

        public Browser()
        {
            browser = new WebBrowser()
            {
                Location = new Point( 0, 30 ),
                Size = new Size( 1200, 800 )                  
            };
            this.Controls.Add( browser );

            this.Shown += new EventHandler( this.Browser_Load );
            this.SizeChanged += new EventHandler( this.ReSized );

            string url = "http://www.google.co.jp";
            browser.Navigate( url );
        }

        private void Browser_Load( object sender, EventArgs e )
        {
            this.ClientSize = new Size( 1200, 830 );
            this.Text = "My Browser";
        }

        private void ReSized( object sender, EventArgs e )
        {
            int width = this.ClientSize.Width;
            int height = this.ClientSize.Height;
            this.browser.Size = new Size( width, height - 30 );
        }
    }
}

こんな感じになった。クソコードっていうな

はい。
後々改造していくし、まだハリボテなので許して。

WebBrowser browser;

こいつはwebブラウザに必要な事(低レイヤの部分?)を全部まるっとやってくれるすごいやつだ!
これをAddするだけで表示ができちゃう!正直びっくりした。
コレに頼ればできちゃうけど、中身もちゃんと理解できるようになりたいですね.....。
まあ今は使えるものは使いましょっと^^

string url = "http://www.google.co.jp";  //urlをstring型変数に格納
browser.Navigate( url );                 //urlをNavigateメソッドに渡す

WebBrowser.Navigate()は指定したURLに飛んでくれるメソッド。
圧倒的便利感。

//ウインドウのサイズが変更されたときに発火するメソッド
private void ReSized( object sender, EventArgs e )
{
    int width = this.ClientSize.Width;                   //現在のウインドウの横幅を格納
    int height = this.ClientSize.Height;                 //現在のウインドウの縦幅を格納
    this.browser.Size = new Size( width, height - 30 );  //表示領域を現在のモノに更新
}

一応リサイズにも対応できるようにしたよ。