tag:crieit.net,2005:https://crieit.net/tags/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BB%98%E3%83%9C%E3%82%BF%E3%83%B3/feed
「イメージ付ボタン」の記事 - Crieit
Crieitでタグ「イメージ付ボタン」に投稿された最近の記事
2019-08-21T10:15:50+09:00
https://crieit.net/tags/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BB%98%E3%83%9C%E3%82%BF%E3%83%B3/feed
tag:crieit.net,2005:PublicArticle/15340
2019-08-21T10:15:50+09:00
2019-08-21T10:15:50+09:00
https://crieit.net/posts/C-Shell32-dll
【C#】ボタンにShell32.dllのイメージを設定する
<p>今回は、ボタンに Windows 標準の画像を表示してみたいと思います。<br />
プログラムは特に流用せず新しいプロジェクトとしました。</p>
<h2 id="画面の作成"><a href="#%E7%94%BB%E9%9D%A2%E3%81%AE%E4%BD%9C%E6%88%90">画面の作成</a></h2>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/02/CSharpButtonImage000.jpg" alt="画面の作成" /></p>
<p>今回はシンプルにボタンのみの画面としました。</p>
<h2 id="プログラムの記述"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E8%A8%98%E8%BF%B0">プログラムの記述</a></h2>
<pre><code> /// <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;
}
</code></pre>
<p> </p>
<h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/02/CSharpButtonImage001.jpg" alt="起動した画面" /></p>
<p>イメージについては次の画像を参考にしてください。</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/02/CSharpButtonImage002.jpg" alt="画像インデックス" /></p>
<p>左上から下に向かって 0 ~ インデックスが割り振られています。</p>
<h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2>
<p>今回はちょっとサクッとでしたが、何かに使うこともあるかと思います。</p>
<p>ではでは。</p>
<p> </p>
doraxdora