.NET TIPS

WindowsアプリケーションをWindows XPスタイルの外観にするには?

デジタルアドバンテージ
2004/11/26

 Windows OSのユーザー・インターフェイスの外観は、Windows XPから「Windows XPスタイル」(通称:Luna)と呼ばれるデザインに変更された(Windows 2000以前の外観は「Windowsクラシック・スタイル」と呼ばれる)。次の画面は、Windowsクラシック・スタイルとWindows XPスタイルを並べて比較したものである。

Windowsクラシック・スタイル(左)とWindows XPスタイル(右)の外観

 しかし、.NETで作成したWindowsアプリケーションをWindows XP上で実行しても、次の画面のようにフォーム内のコントロールの外観はWindows XPスタイルにならない。

Windows XPスタイルになっていない.NETアプリケーションの外観

 そこで本稿では、.NETで作成したWindowsアプリケーションの外観をWindows XPスタイルにする方法を紹介する。これには2つの方法があるので、それぞれについて解説する(以降、Visual Studio .NETは「VS.NET」と略記)。

 なお、Windows XPスタイルの外観を持つことのできる.NETのコントロールは次のとおりである。

  • TextBoxコントロール
  • ComboBoxコントロール
  • RichTextBoxコントロール
  • ListBoxコントロール
  • TreeViewコントロール
  • ListViewコントロール
  • TreeViewコントロール
  • DataGridコントロール
  • DateTimePickerコントロール
  • MonthCalendarコントロール
  • ToolBarコントロール
  • StatusBarコントロール
  • ProgressBarコントロール
  • TrackBarコントロール
  • TabControlコントロール
  • Splitterコントロール
  • HScrollBarコントロール
  • VScrollBarコントロール
  • MainMenuコントロール
  • ContextMenuコントロール

EnableVisualStylesメソッドによるWindows XPスタイルの実装

 .NET Framework 1.0にはなかったが、.NET Framework 1.1(VS.NET 2003)ではWindows XPスタイルを実装するためのメソッドが用意されている。

 これにはまず、次のコントロールについては、そのFlatStyleプロパティを「System」(System.Windows.Forms名前空間のFlatStyle列挙体の値)に設定変更する必要がある。

  • Buttonコントロール
  • GroupBoxコントロール
  • CheckBoxコントロール
  • RadioButtonコントロール

 次に、Applicationクラス(System.Windows.Forms名前空間)のRunメソッドを呼び出している個所(通常はMainメソッド内)の直前で、同じくApplicationクラスのEnableVisualStylesメソッドの呼び出しを記述すればよい。具体的には次のようなコードになる。

[STAThread]
static void Main()
{
  Application.EnableVisualStyles();
  Application.DoEvents();
  Application.Run(new Form1());
}
EnableVisualStylesメソッドによるWindows XPスタイルを実装するサンプル・コード(C#)
 
Shared  Sub Main()
  Application.EnableVisualStyles()
  Application.DoEvents()
  Application.Run(New Form1())
End Sub
EnableVisualStylesメソッドによるWindows XPスタイルを実装するサンプル・コード(VB.NET)

 なお、上記コードでApplicationクラスのDoEventsメソッドを呼び出しているのは、EnableVisualStylesメソッドを呼び出すと、TreeViewコントロールやToolbarコントロールのイメージ画像がすべて消えてしまうバグがある(らしい)ためである。これを回避するには、EnableVisualStylesメソッドの呼び出しの後でDoEventsメソッドを呼び出せばよいことが分かっている(必ずしも常にうまくいくとはいい切れないので注意すること)。

 Application.EnableVisualStylesメソッドはバグが多いことで評判が悪いメソッドなので、もし正常に実行できるかを不安に思う人は、次に説明する第2の方法を使ってWindows XPスタイルを実装するとよいだろう。

マニフェスト・ファイルを使ったWindows XPスタイルの実装

 この方法は、.NET Framework 1.0(VS.NET 2002)のときから使用できるやり方であり、.NET Framework 1.1(VS.NET 2003)でも有効だ。

 こちらの場合でも、事前に、次のコントロールのFlatStyleプロパティを「System」に設定しておく必要がある。

  • Buttonコントロール
  • GroupBoxコントロール
  • CheckBoxコントロール
  • RadioButtonコントロール

 この方法では、WindowsアプリケーションにWindows XPスタイルの外観を持たせるのに、コードを書く必要はない。Windowsアプリケーションと同じディレクトリに「マニフェスト・ファイル」を作成しておくだけで、そのアプリケーションにWindows XPスタイルの外観が適用される。

 マニフェスト・ファイルは、アプリケーションが利用するコンポーネントなどの情報を記述するためのXMLファイルである。アプリケーションにWindows XPスタイルの外観を持たせるには、このXMLファイルにWindows XP用の新しいCOMCTL32.DLL(Version.6のコモン・コントロール)を使うように記述すればよい(古いVersion.5のCOMCTL32.DLLがデフォルトで使われる理由を筆者は知らないが、恐らくWindows XPにネイティブ対応していないアプリケーションがそのまま動くように下位互換性を持たせるためだろう)。

 具体的には、マニフェスト・ファイルとして次の内容のファイルを作成すればよい(テキスト・エディタなどで編集する)。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
  version="1.0.0.0"
  processorArchitecture="X86"
  name="Microsoft.Winweb.WindowsApplication1.exe"
  type="win32"
/>
<description>.NET control deployment tool</description>
<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="X86"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
  </dependentAssembly>
</dependency>
</assembly>
Windows XPの外観を指定するためのマニフェスト・ファイルの内容
太字の部分(この例では「WindowsApplication1.exe」)にはアプリケーションの実行ファイルを指定するため、アプリケーションごとに記述内容が異なる。本稿の例では、アプリケーションが「WindowsApplication1.exe」というファイル名なので、このような記述となっている。

 このマニフェスト・ファイルの名前は、「<アプリケーション名>.manifest」とする必要がある。例えば実行ファイルの名前が「WindowsApplication1.exe」というアプリケーションならば、マニフェスト・ファイルの名前は「WindowsApplication1.exe.manifest」となる。

 また、上記のマニフェスト・ファイルの内容にある太字の部分には、アプリケーション名(本稿の例では「WindowsApplication1.exe」)を指定する。そのためアプリケーションごとに指定内容が異なるので注意してほしい。

 以上でWindowsアプリケーションのコードは何も変更せずにそのままアプリケーションを起動すれば、Windows XPスタイルが適用されるはずだ(マニフェスト・ファイルがアプリケーションと同じディレクトリに配置されているかを注意すること)。

 この第2の方法を用いた場合、アプリケーションの実行に際して最低でも2つのファイルが必要となるが、マニフェスト・ファイルは実行ファイルに組み込むこともできる。これについては別稿「TIPS:マニフェスト・ファイルをアプリケーションに組み込むには?」で解説している。End of Article

カテゴリ:Windowsフォーム 処理対象:コントロール
使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間)
関連TIPS:マニフェスト・ファイルをアプリケーションに組み込むには?
 
この記事と関連性の高い別の.NET TIPS
Windowsフォーム上のすべてのコントロールを列挙するには?
DataGridViewコントロールで列ヘッダや行ヘッダの色を変えるには?[2.0のみ、C#、VB]
マニフェスト・ファイルをアプリケーションに組み込むには?
Windowsフォームでグループ化されたコントロールのタブ・オーダーを設定するには?
[WPF/UWP]ListView内のTextBoxがクリックされたときに選択項目を切り替えるには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間