連載
» 2004年08月27日 05時00分 公開

.NET TIPS:Windowsアプリケーションをフルスクリーンで表示するには?

[一色政彦,デジタルアドバンテージ]
.NET TIPS
Insider.NET


「.NET TIPS」のインデックス

連載目次

 Windowsアプリケーションでは、デスクトップいっぱいにウィンドウを表示する「最大化表示」のほかに、ウィンドウの上下左右の枠と上部のタイトル・バーを非表示にして、ウィンドウ内部(=クライアント領域)をデスクトップ全体に表示する「フルスクリーン表示」がある(フルスクリーン表示では、デスクトップ最下部(デフォルト時)にあるタスク・バーも覆う)。

 次の画面は、Visual Studio .NET 2003のIDEを、実際にフルスクリーンで表示したところだ。

Visual Studio .NET 2003のフルスクリーン表示 Visual Studio .NET 2003のフルスクリーン表示
Visual Studio .NETのIDEで、ショートカット・キー[Alt]+[Shift]+[Enter]を押すか、メニュー・バーから[表示]−[全画面表示]を選択すると、IDEのウィンドウ内部がデスクトップ全体に広がって表示される。

 本稿では、このようなフルスクリーン表示を行う方法を紹介する。

Windowsアプリケーションでのフルスクリーン表示

 WindowsアプリケーションのWindowsフォームをフルスクリーンで表示するには、次の2つのプロパティを順番に設定する。

  1. WindowsフォームのFormBorderStyleプロパティ(フォームの境界線スタイル)に、FormBorderStyle列挙体(System.Windows.Forms名前空間)の「None(境界線なし)」を設定する

// C#のサンプル・コード:
this.FormBorderStyle = FormBorderStyle.None;

' VB.NETのサンプル・コード:
Me.FormBorderStyle = FormBorderStyle.None


 2. WindowsフォームのWindowStateプロパティ(ウィンドウ状態)に、FormWindowState列挙体(System.Windows.Forms名前空間)の「Maximized(最大化)」を設定する

// C#のサンプル・コード:
this.WindowState = FormWindowState.Maximized;

' VB.NETのサンプル・コード:
Me.WindowState = FormWindowState.Maximized


 この2つのプロパティは、必ずこの1→2の順番で設定する必要がある。そうしないと、タスク・バーが表示されたままになり、完全なフルスクリーン表示にならないので注意してほしい。

 Windowsアプリケーションを起動から終了までずっとフルスクリーンで表示し続けるような場合は、この2つのプロパティをあらかじめWindowsフォーム・デザイナで設定するか、Windowsフォームのコンストラクタなどで設定すれば、フルスクリーン表示の対応は完了である。しかし、スクリーン・セーバーでもない限り、通常表示とフルスクリーン表示のモード切り替えが必要になるだろう。次に、この切り替え方法について紹介しよう。

フルスクリーン表示のモード切り替えに対応するには?

 Windowsアプリケーションの表示をフルスクリーン表示に変更する方法は、先ほど述べたように、2つのプロパティを次のように設定すればよい。

  1. FormBorderStyleプロパティを「FormBorderStyle.None」に設定する
  2. WindowStateプロパティを「FormWindowState.Maximized」に設定する

 逆に通常表示に戻すには、2つのプロパティを次のように設定する。

  1. FormBorderStyleプロパティに「FormBorderStyle.Sizable(サイズ変更可能な境界線スタイル)」を設定する
  2. WindowStateプロパティを「FormWindowState.Normal(通常の状態)」に設定する

 これにより、フルスクリーン表示と通常表示を切り替えることが可能である。しかし、ここで1つ問題がある。フルスクリーン・モードに切り替える際、その直前のウィンドウの状態が「最大化表示」だった場合、フルスクリーン表示に切り替えてもタスク・バーが表示されたまま残ってしまうのだ(完全なフルスクリーン表示にはならない)。

フルスクリーン表示への切り替え時の問題 フルスクリーン表示への切り替え時の問題
フルスクリーン表示に切り替える際、その直前のウィンドウの状態が「最大化表示」の場合、フルスクリーン表示に切り替えてもタスク・バーが表示されたまま残ってしまう。

 この問題は、フルスクリーン表示する前に、最大化表示されているウィンドウをいったん「通常表示」にすることで回避できる*

*この処理のために、フルスクリーン表示されるまでの間にウィンドウがちらつく場合がある。ただしこの動作はVisual Studio .NETのIDEなどでも同様である。


フルスクリーン・モード切り替え時の問題の解消 フルスクリーン・モード切り替え時の問題の解消
フルスクリーン・モード切り替え時の問題を回避するために、「最大化表示」と「フルスクリーン表示」の間に「通常表示」を挿入する。

 このための具体的なプロパティ設定の手順は次のようになる。

 0. WindowStateプロパティを「FormWindowState.Normal」に設定する

 1. FormBorderStyleプロパティを「FormBorderStyle.None」に設定する

 2. WindowStateプロパティを「FormWindowState.Maximized」に設定する

 さらに、「最大化表示」→「フルスクリーン表示」との表示のバランスをとるために、「フルスクリーン表示」→「最大化表示」の際にも、この2つの表示処理の間に「通常表示」を追加する(これをしないと、両者の表示のバランスを欠いて、見栄えが少し悪くなってしまう)。実際には、次のような手順でプロパティを設定する。

 0. WindowStateプロパティを「FormWindowState.Normal」に設定する

 1. FormBorderStyleプロパティを「FormBorderStyle.Sizable」に設定する

 2. WindowStateプロパティを「FormWindowState.Maximized」に設定する

 もしフルスクリーン表示を変更する前のウィンドウの状態が、「最大化表示」「通常表示」のどちらもあり得る場合には、そのウィンドウ状態で条件分岐して、上記のプロパティ設定手順の「0」を実行するかしないかを決定すればよい。

フルスクリーン表示のモード切り替えのサンプル・プログラム

 本稿では、以上のフルスクリーン表示のモードを切り替えるための処理を実装した次のようなサンプル・プログラムを作成した。次の画面はサンプル・プログラムを最大化表示したところだ。

サンプル・プログラムの最大化表示 サンプル・プログラムの最大化表示
アプリケーション・ウィンドウがデスクトップ全体に表示されてはいるものの、Windowsシステムのタスク・バーや、ウィンドウのタイトル・バーは依然として表示されている。

 そして次の画面が、フルスクリーン表示したところだ。

サンプル・プログラムのフルスクリーン表示 サンプル・プログラムのフルスクリーン表示
Windowsシステムのタスク・バーや、ウィンドウのタイトル・バーも非表示になっている。

 このサンプル・プログラムの「フルスクリーン表示と通常表示の切り替え」に関するソース・コードは次のとおりだ(なお、サンプル・プログラム全体は、コードの下のタイトル欄にあるリンクからダウンロードできる)。

// フルスクリーン・モードかどうかのフラグ
private bool _bScreenMode;
// フルスクリーン表示前のウィンドウの状態を保存する
private FormWindowState prevFormState;
// 通常表示時のフォームの境界線スタイルを保存する
private FormBorderStyle prevFormStyle;
// 通常表示時のウィンドウのサイズを保存する
private Size prevFormSize;

private void Form1_Load(object sender, System.EventArgs e)
{
  // フルスクリーン・モードで起動
  _bScreenMode = true;

  // フルスクリーン表示前のウィンドウの状態を保存する
  prevFormState = FormWindowState.Normal;
  // 通常表示時のフォームの境界線スタイルを保存する
  prevFormStyle = FormBorderStyle.Sizable;
  // 通常表示時のウィンドウのサイズを保存する
  prevFormSize = new Size(496, 219);
}

private void button1_Click(object sender, System.EventArgs e)
{
  if (_bScreenMode == false)
  {
    // <フルスクリーン表示への切り替え処理>

    // ウィンドウの状態を保存する
    prevFormState = this.WindowState;
    // 境界線スタイルを保存する
    prevFormStyle = this.FormBorderStyle;

    // 0. 「最大化表示」→「フルスクリーン表示」では
    // タスク・バーが消えないので、いったん「通常表示」を行う
    if (this.WindowState == FormWindowState.Maximized)
    {
      this.WindowState = FormWindowState.Normal;
    }

    // フォームのサイズを保存する
    prevFormSize = this.ClientSize;

    // 1. フォームの境界線スタイルを「None」にする
    this.FormBorderStyle = FormBorderStyle.None;
    // 2. フォームのウィンドウ状態を「最大化」する
    this.WindowState = FormWindowState.Maximized;

    // ボタンの表示を変更する
    this.button1.Text = "通常表示する";

    // フルスクリーン表示をONにする
    _bScreenMode = true;
  }
  else
  {
    // <通常表示/最大化表示への切り替え処理>

    // フォームのウィンドウのサイズを元に戻す
    this.ClientSize = prevFormSize;

    // 0. 最大化表示に戻す場合にはいったん通常表示を行う
    // (フルスクリーン表示の処理とのバランスと取るため)
    if (prevFormState == FormWindowState.Maximized)
    {
      this.WindowState = FormWindowState.Normal;
    }

    // 1. フォームの境界線スタイルを元に戻す
    this.FormBorderStyle = prevFormStyle;

    // 2. フォームのウィンドウ状態を元に戻す
    this.WindowState = prevFormState;

    // ボタンの表示を変更する
    this.button1.Text = "フルスクリーン表示する";

    // フルスクリーン表示をOFFにする
    _bScreenMode = false;
  }
}

フルスクリーン表示のモード切り替えのサンプル・プログラム(C#)
サンプル・プログラムのダウンロード(fullscreen.cs)

' フルスクリーン表示かどうかのフラグ
Private _bScreenMode As Boolean
' フルスクリーン表示前のウィンドウの状態を保存する
Private prevFormState As FormWindowState
' 通常表示時のフォームの境界線スタイルを保存する
Private prevFormStyle As FormBorderStyle
' 通常表示時のウィンドウのサイズを保存する
Private prevFormSize As Size
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' フルスクリーン表示で起動
  _bScreenMode = True

  ' フルスクリーン表示前のウィンドウの状態を保存する
  prevFormState = FormWindowState.Normal
  ' 通常表示時のフォームの境界線スタイルを保存する
  prevFormStyle = FormBorderStyle.Sizable
  ' 通常表示時のウィンドウのサイズを保存する
  prevFormSize = New Size(496, 219)
End Sub

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

  If (_bScreenMode = False) Then
    ' <フルスクリーン表示への切り替え処理>

    ' ウィンドウの状態を保存する
    prevFormState = Me.WindowState
    ' 境界線スタイルを保存する
    prevFormStyle = Me.FormBorderStyle

    ' 0. 「最大化表示」→「フルスクリーン表示」では
    ' タスク・バーが消えないので、いったん「通常表示」を行う
    If Me.WindowState = FormWindowState.Maximized Then
      Me.WindowState = FormWindowState.Normal
    End If

    ' フォームのサイズを保存する
    prevFormSize = Me.ClientSize

    ' 1. フォームの境界線スタイルを「None」にする
    Me.FormBorderStyle = FormBorderStyle.None
    ' 2. フォームのウィンドウ状態を「最大化」する
    Me.WindowState = FormWindowState.Maximized

    ' ボタンの表示を変更する
    Me.button1.Text = "通常表示する"

    ' フルスクリーン表示をONにする
    _bScreenMode = True

  Else
    ' <通常表示/最大化表示への切り替え処理>

    ' フォームのウィンドウのサイズを元に戻す
    Me.ClientSize = prevFormSize

    ' 0. 最大化表示に戻す場合にはいったん通常表示を行う
    ' (フルスクリーン表示の処理とのバランスと取るため)
    If prevFormState = FormWindowState.Maximized Then
      Me.WindowState = FormWindowState.Normal
    End If

    ' 1. フォームの境界線スタイルを元に戻す
    Me.FormBorderStyle = prevFormStyle

    ' 2. フォームのウィンドウ状態を元に戻す
    Me.WindowState = prevFormState

    ' ボタンの表示を変更する
    Me.button1.Text = "フルスクリーン表示する"

    ' フルスクリーン表示をOFFにする
    _bScreenMode = False

  End If

End Sub

フルスクリーン表示のモード切り替えのサンプル・プログラム(VB.NET)
サンプル・プログラムのダウンロード(fullscreen.vb)

 上記のコードでは、フルスクリーン表示に切り替える前に、「現在のウィンドウの状態」「境界線のスタイル」「ウィンドウのサイズ」を保存し、フルスクリーン表示を解除したときに、これらの保存した情報を再設定することで、ウィンドウをフルスクリーン表示前と同じ状態に戻している。

カテゴリ:Windowsフォーム 処理対象:ウィンドウ
使用ライブラリ:Formクラス(System.Windows.Forms名前空間)
使用ライブラリ:FormBorderStyle列挙体(System.Windows.Forms名前空間)
使用ライブラリ:FormWindowState列挙体(System.Windows.Forms名前空間)
使用ライブラリ:Sizeクラス(System.Drawing名前空間)


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。