今回は、ボタンに Windows 標準の画像を表示してみたいと思います。
プログラムは特に流用せず新しいプロジェクトとしました。
今回はシンプルにボタンのみの画面としました。
/// <summary>
/// アイコン取得関数.
/// </summary>
/// <param name="file"></param>
/// <param name="index"></param>
/// <param name="largeIconHandle"></param>
/// <param name="smallIconHandle"></param>
/// <param name="icons"></param>
/// <returns></returns>
[DllImport("shell32.dll", EntryPoint = "ExtractIconEx", CharSet = CharSet.Auto)]
public static extern int ExtractIconEx([MarshalAs(UnmanagedType.LPTStr)] string file, int index, out IntPtr largeIconHandle, out IntPtr smallIconHandle, int icons);
/// <summary>
/// アイコン破棄関数.
/// </summary>
/// <param name="hIcon"></param>
/// <returns></returns>
[DllImport("User32.dll")]
private static extern bool DestroyIcon(IntPtr hIcon);
/// <summary>
/// 起動時の処理
/// </summary>
public Form1()
{
InitializeComponent();
// ボタンイメージを設定
SetIconToButton(button0, 27);
SetIconToButton(button1, 31);
SetIconToButton(button2, 144);
}
/// <summary>
/// ボタンにイメージをセットします.
/// </summary>
/// <param name="btn"></param>
/// <param name="iconIndex"></param>
public static void SetIconToButton(Button btn, int iconIndex)
{
string shell32Path = "C:\\Windows\\System32\\Shell32.dll";
Icon icon = GetIconImage(shell32Path, iconIndex, true);
btn.Image = icon.ToBitmap();
btn.TextImageRelation = TextImageRelation.ImageAboveText;
}
/// <summary>
/// アイコン画像を取得します.
/// </summary>
/// <param name="path"></param>
/// <param name="iconIndex"></param>
/// <param name="iconSize"></param>
/// <returns></returns>
public static Icon GetIconImage(string path, int iconIndex, inticonSize)
{
try
{
Icon[] icons = new Icon[2];
IntPtr largeIconHandle = IntPtr.Zero;
IntPtr smallIconHandle = IntPtr.Zero;
ExtractIconEx(path, iconIndex, out largeIconHandle, out smallIconHandle, 1);
icons[0] = (Icon)Icon.FromHandle(largeIconHandle).Clone();
icons[1] = (Icon)Icon.FromHandle(smallIconHandle).Clone();
DestroyIcon(largeIconHandle);
DestroyIcon(smallIconHandle);
if (iconSize)
{
return icons[0];
}
else
{
return icons[1];
}
}
catch (Exception)
{
}
return null;
}
イメージについては次の画像を参考にしてください。
左上から下に向かって 0 ~ インデックスが割り振られています。
今回はちょっとサクッとでしたが、何かに使うこともあるかと思います。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント