Visual Studio 2005 (C++) でWin32コンソールアプリケーションの.exeファイルにエクスプローラー用のアイコンをセットする方法。
いま、このバージョンを使う人はレガシーOS向けのアプリをメンテする希少な人くらいだろう。私はXP用のアプリを開発するにあたってVisual Studioを久々に触ったことと、Win32アプリの開発はあまり経験がないので、少しやり方に迷った。
VS2005でWin32アプリを開発するには、有償版であるStandard Edition(またはAcademic Edition)以上が必要。フリーのVC++ 2005 Express Editionで全く作れないわけではないが、リソースエディタが使えないなど様々な制限がある。
方法
以下、テンプレート「Win32 コンソール アプリケーション」からプロジェクトを新規作成した想定。
ソリューションエクスプローラでプロジェクトを右クリックし、「追加」→「リソース」をクリックする。
![]()
私がこの画面を使うのはバージョン情報を追加するときくらいだが、今回は「インポート…」をクリックする。
![]()
ファイルの種類をアイコンファイル (*.ico) に変えて、追加したいアイコンファイルを選ぶ。VS2005には開発者が組み込み用に使える既成のアイコンファイルが付属し、ここではそのフォルダーを参照している。ただ、サイズがウィンドウやツールバー用の16×16しかないのが残念。ここで追加する前に、今後のことを考えると、プロジェクトを配置したフォルダーにコピーした方が良い。
![]()
リソースビューのツリーにアイコンが追加された。この時点でビルドすれば、アイコンは既に設定されている。
![]()
リソースに複数のアイコンが存在する場合、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も。