WPF におけるアイコン

Last Updated 2011/01/11


WPF の中にアイコンに関する機能がほとんどありません。しかし、当然ながらアイコンを使う機会はあります。このページではアイコンに関するあってもよさそうな機能について取り上げます。


アイコン(.ico ファイル)については System.Drawing.Icon クラスや System.Drawing.SystemIcons クラスがあるので間に合いそうなものですが、WPF アプリケーションとの相性がよくありません。たとえば、Image コントロールの Source プロパティにそのまま設定することはできません。しかし、遠回りな方法でなら利用することができます。以下のコードはフォームに button1 と image1 を配置し、button1 をクリックすると、System.Drawing.SystemIcons.Application を image1 に表示します。

private void button1_Click(object sender, RoutedEventArgs e)
{
  IntPtr handle = System.Drawing.SystemIcons.Application.Handle;

  BitmapSource source = Imaging.CreateBitmapSourceFromHIcon(handle, Int32Rect.Empty, null);

  image1.Source = source;
}

Imaging クラスは以下の 3 つのメソッドを持ちます。メソッド名を見れば、その機能はおおよその想像は付くと思いますので、ここでは説明しません。私が別途、公開している WPF クラスライブアリリファレンスを見てください。

戻り値はすべて BitmapSource オブジェクトなのでそのまま使うことができます。

shell32.dll と ImageRes.dll

System32 ディレクトリ内に shell32.dll と ImageRes.dll とがあります。これらの DLL はアイコンを内蔵しているので、それを抜き出して利用することができます。「ストックアイコン」の項で紹介するアプリケーションの [Extract Icon] を選択すると、DLL ファイルに含まれるすべてのアイコンを表示します。


ストックアイコン

ストックアイコン "stock icon" は Windows 自身が利用するアイコンで、ドライブの種類をあらわすアイコンやダイアログボックス(MessageBox クラス)用アイコンを提供します。下図は、すべてのストックアイコンをリストアップしたところです。

StockIconView

上図のアプリケーションのソースコードを公開します。画像の表示部は ListView コントロールを使っていますが、その View プロパティに ViewBase クラスから派生したクラスを使っています。プロジェクトは Visual Studio 2008 で作りました。

IconText.lzh (16,569 bytes)

なお、[Show Images] は選択した複数の画像ファイルを表示します。

−以上−