.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メソッドの呼び出しを記述すればよい。具体的には次のようなコードになる。
|
|
EnableVisualStylesメソッドによるWindows XPスタイルを実装するサンプル・コード(C#) |
|
|
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にネイティブ対応していないアプリケーションがそのまま動くように下位互換性を持たせるためだろう)。
具体的には、マニフェスト・ファイルとして次の内容のファイルを作成すればよい(テキスト・エディタなどで編集する)。
|
|
Windows XPの外観を指定するためのマニフェスト・ファイルの内容 | |
太字の部分(この例では「WindowsApplication1.exe」)にはアプリケーションの実行ファイルを指定するため、アプリケーションごとに記述内容が異なる。本稿の例では、アプリケーションが「WindowsApplication1.exe」というファイル名なので、このような記述となっている。 | |
このマニフェスト・ファイルの名前は、「<アプリケーション名>.manifest」とする必要がある。例えば実行ファイルの名前が「WindowsApplication1.exe」というアプリケーションならば、マニフェスト・ファイルの名前は「WindowsApplication1.exe.manifest」となる。
また、上記のマニフェスト・ファイルの内容にある太字の部分には、アプリケーション名(本稿の例では「WindowsApplication1.exe」)を指定する。そのためアプリケーションごとに指定内容が異なるので注意してほしい。
以上でWindowsアプリケーションのコードは何も変更せずにそのままアプリケーションを起動すれば、Windows XPスタイルが適用されるはずだ(マニフェスト・ファイルがアプリケーションと同じディレクトリに配置されているかを注意すること)。
この第2の方法を用いた場合、アプリケーションの実行に際して最低でも2つのファイルが必要となるが、マニフェスト・ファイルは実行ファイルに組み込むこともできる。これについては別稿「TIPS:マニフェスト・ファイルをアプリケーションに組み込むには?」で解説している。
カテゴリ:Windowsフォーム 処理対象:コントロール 使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間) 関連TIPS:マニフェスト・ファイルをアプリケーションに組み込むには? |
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|