Image: Win32コンソールアプリの.exeファイルにアイコンを設定する [VS2005]

Visual Studio 2005 (C++) でWin32コンソールアプリケーションの.exeファイルにエクスプローラー用のアイコンをセットする方法。

いま、このバージョンを使う人はレガシーOS向けのアプリをメンテする希少な人くらいだろう。私はXP用のアプリを開発するにあたってVisual Studioを久々に触ったことと、Win32アプリの開発はあまり経験がないので、少しやり方に迷った。

VS2005でWin32アプリを開発するには、有償版であるStandard Edition(またはAcademic Edition)以上が必要。フリーのVC++ 2005 Express Editionで全く作れないわけではないが、リソースエディタが使えないなど様々な制限がある。

方法

以下、テンプレート「Win32 コンソール アプリケーション」からプロジェクトを新規作成した想定。

ソリューションエクスプローラでプロジェクトを右クリックし、「追加」→「リソース」をクリックする。

Image: Visual Studio 2005

私がこの画面を使うのはバージョン情報を追加するときくらいだが、今回は「インポート…」をクリックする。

Image: Visual Studio 2005

ファイルの種類をアイコンファイル (*.ico) に変えて、追加したいアイコンファイルを選ぶ。VS2005には開発者が組み込み用に使える既成のアイコンファイルが付属し、ここではそのフォルダーを参照している。ただ、サイズがウィンドウやツールバー用の16×16しかないのが残念。ここで追加する前に、今後のことを考えると、プロジェクトを配置したフォルダーにコピーした方が良い。

Image: Visual Studio 2005

リソースビューのツリーにアイコンが追加された。この時点でビルドすれば、アイコンは既に設定されている。

Image: Visual Studio 2005

リソースに複数のアイコンが存在する場合、IDが最も小さいアイコンがエクスプローラーに表示される。このIDは、ソリューションエクスプローラで.rcファイルをソースコードとして開くと表示される識別子を右クリックし、定義を参照すれば分かる。VSの自動生成では、IDはresource.hというヘッダーファイルに定義される。

.rcファイル

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1     ICON     "app.ico"

resource.h

#define IDI_ICON1      103

コンソールウィンドウにアイコンをセットすることはできないはず。アプリ起動時にVCランタイムの内部ではWin32 APIのAllocConsole関数でコンソールを呼び出していて、ウィンドウ関係で設定できるのはタイトルとウィンドウサイズくらいか。

アイコンファイルの注意点。

  • Windows Vista以降はBMPとPNG形式に対応。XP以前はBMP形式のみ。
  • Windows XPは24ビット(RGB)、32ビットカラー(ARGB) に対応。Windows 98はモノクロ、16色、256色のみ。
  • Windows XP以前用の推奨サイズは16×16、24×24、32×32、48×48。Vista以降に対応するなら256×256も。

詳細はアイコンリソースの最適化と実行ファイルサイズの削減 [VC#]を参照。


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!