SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

仮想ネットワークの実装で学ぶTCP/IP

仮想ネットワーク実装でTCP/IPを学ぼう(7)
― GDI+と独自プロトコルの定義

仮想ネットワーク実装でTCP/IPを学ぼう(7)


  • X ポスト
  • このエントリーをはてなブックマークに追加

 これでひとまず表示はできましたが、MDIでは子フォームの管理が重要となります。子フォームを自動的に並べて表示するには、System.Windows.Forms.FormクラスLayoutMdiメソッドを使用します。

 また、子フォームの一覧を表示するメニューを作るには、System.Windows.Forms.MenuStripオブジェクトのMdiWindowListItemプロパティにSystem.Windows.Forms.ToolStripMenuItemオブジェクトのインスタンスを指定します。子フォームの管理を最低限だけ行うサンプルプロジェクトLayoutMdiSampleのコードを掲載しますので、コードをよく見てください。

子フォームの管理を最低限だけ行うサンプル(C#)
using System;
using System.Windows.Forms;

static class LayoutMdiSample
{
    static void Main()
    {
        //---------------------------------親フォームを作成---------------------------------
        Form parent = new Form();
        parent.Text = "親フォーム";
        parent.IsMdiContainer = true;
        parent.WindowState = FormWindowState.Maximized;

        //-------------------------------各種メニューを作成-------------------------------

        //子フォームの表示方法を指定するメニュー
        ToolStripMenuItem WindowLayoutMenu = new ToolStripMenuItem();
        WindowLayoutMenu.Name = "WindowLayoutMenu";
        WindowLayoutMenu.Text = "ウィンドウの表示";
        WindowLayoutMenu.AutoSize = true;

        //子フォームを重ねて表示するメニュー
        ToolStripMenuItem CascadeMenu = new ToolStripMenuItem();
        CascadeMenu.Name = "CascadeMenu";
        CascadeMenu.Text = "重ねて表示";
        CascadeMenu.AutoSize = true;
        CascadeMenu.Click += delegate {
            parent.LayoutMdi( MdiLayout.Cascade );
        };

        //子フォームを垂直に並べて表示するメニュー
        ToolStripMenuItem TileVerticalMenu = new ToolStripMenuItem();
        TileVerticalMenu.Name = "TileVerticalMenu";
        TileVerticalMenu.Text = "垂直に並べて表示";
        TileVerticalMenu.AutoSize = true;
        TileVerticalMenu.Click += delegate {
            parent.LayoutMdi( MdiLayout.TileVertical );
        };

        //子フォームを水平に並べて表示するメニュー
        ToolStripMenuItem TileHorizontalMenu = new ToolStripMenuItem();
        TileHorizontalMenu.Name = "TileHorizontalMenu";
        TileHorizontalMenu.Text = "水平に並べて表示";
        TileHorizontalMenu.Click += delegate {
            parent.LayoutMdi( MdiLayout.TileHorizontal );
        };

        //子フォームを最小表示状態で並べて表示する(子フォームをアイコン化する)メニュー
        ToolStripMenuItem ArrangeIconsMenu = new ToolStripMenuItem();
        ArrangeIconsMenu.Name = "ArrangeIconsMenu";
        ArrangeIconsMenu.Text = "最小表示状態のフォームを並べる";
        ArrangeIconsMenu.AutoSize = true;
        ArrangeIconsMenu.Click += delegate {
            parent.LayoutMdi( MdiLayout.ArrangeIcons );
        };


        //子フォームの一覧を表示するメニュー
        ToolStripMenuItem WindowMenu = new ToolStripMenuItem();
        WindowMenu.Name = "WindowMenu";
        WindowMenu.Text = "ウインドウ";
        WindowMenu.AutoSize = true;

        //全てのメニューを持つメインメニュー
        MenuStrip MainMenu = new MenuStrip();
        MainMenu.Name = "MainMenu";

        //--------------------------------各種メニューを設定--------------------------------
        WindowLayoutMenu.DropDownItems.AddRange( new ToolStripItem[ ] {
            CascadeMenu, TileVerticalMenu, TileHorizontalMenu, ArrangeIconsMenu
        } );
        MainMenu.Items.AddRange( new ToolStripItem[ ] { 
            WindowLayoutMenu, WindowMenu} );
        MainMenu.MdiWindowListItem = WindowMenu;
        parent.MainMenuStrip = MainMenu;
        parent.Controls.Add( MainMenu );

        //---------------------------------子フォームを作成---------------------------------
        Form child = new Form();
        child.Text = "子フォーム1";
        child.MdiParent = parent;
        child.Show();

        Form child1 = new Form();
        child1.Text = "子フォーム2";
        child1.MdiParent = parent;
        child1.Show();

        Form child2 = new Form();
        child2.Text = "子フォーム3";
        child2.MdiParent = parent;
        child2.Show();

        //-------------------------------------実行開始-------------------------------------
        Application.EnableVisualStyles();
        Application.Run( parent );
    }
}
サンプル実行画面
サンプル実行画面

 サンプルを実行して分かりにくいのがLayoutMdi( MdiLayout.ArrangeIcons )だと思います。MdiLayout.ArrangeIconsが指定された場合は、「最小表示になっているフォーム」のみ画面の隅で整列されます。そのため、最小表示にしていないフォームは整列しません。一度サンプルで、複数のフォームを最小表示してから実行してみてください。

 これで基本的なMDIアプリケーションについての解説は終わりです。サンプルを触っていると、細かい点で気になるところがあると思いますが、仮想ネットワークの話題とは関係ないのでひとまず気にしないでください。

 次項からはGraffitiを実装するために必要となる、.NETのグラフィックプログラミング「GDI+(Graphical Device Interface)」の解説を始めます。

次のページ
描画の基本

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
仮想ネットワークの実装で学ぶTCP/IP連載記事一覧

もっと読む

この記事の著者

インドリ(インドリ)

分析・設計・実装なんでもありのフリーエンジニア。ブログ「無差別に技術をついばむ鳥(http://indori.blog32.fc2.com/)」の作者です。アドバイザーをしたり、システム開発したり、情報処理技術を研究したりと色々しています。座右の銘は温故知新で、新旧関係なく必要だと考えたものは全て学...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5170 2010/06/17 10:35

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング