【C++】MFCの実行ファイルのアイコンを変更するには?

C++

 Visual C++でアプリケーションを開発したとき、タスクバーに表示されるアイコンを変更したい場合があります。

 しかし、C#と異なり、VisualC++ではプロジェクトのプロパティからかんたんに変更することはできません。ヘッダーファイルなどの編集が必要になります。

 当記事では、MFCアプリケーションやVisual C++のアプリケーションアイコン(実行ファイルのアイコン)を任意のアイコンに変更する方法を紹介します。

アイコンを変更しても、表示が変化しないときの対処法も紹介しています。

スポンサーリンク

MFCアプリケーションのアイコンはどう決められている?

 C#やVBといった.NETでは、Visual Studioでプロジェクトのプロパティを開くと、GUIから使用するアイコンを設定できます。対して、MFCなどのVisual Cではこういったことができません。

C#やVBでは、Visual Studioからアイコンを設定できるが、MFCではできない。

 ではどのように変更するかというと、アイコンリソースのIDを変更します。

 各リソースには、ヘッダファイルにより定義されるIDが割り当てられています。そして、最小のIDが設定されたアイコンが、実行ファイルのアイコンとして使用されるようになっています。よって、実行ファイルのアイコンに使用したいアイコンリソースのIDを、アイコンリソースのなかで最も小さな値に変更してやることで、任意のアイコンをexeファイルに表示させることができます。

アイコンはどのように保存されているの?

そもそもアプリケーションの実行ファイルなどのアイコンは、どのようにして表示されているのでしょうか。

exe形式は一般に実行ファイルとして知られていますが、もう一つ重要な側面として、アーカイブ形式であることが挙げられます。アーカイブとは、複数のファイルを一つのファイルに集約することをいいますが、exeファイルもこのアーカイブ形式の一つで、アイコンはexeファイルの中にアーカイブされて格納されています。エクスプローラーで表示されるときに、アーカイブされているアイコンが表示されるという仕組みです。

Lhaplusなどのソフトウェアを用いると、次の画像のようにアーカイブされたファイルを取り出すことができます。

Lhaplusを使って、ビルド済みのexeを強制的に解凍してみたときのようす。解凍先のフォルダにたくさんのアイコンが含まれていることがわかります。
スポンサーリンク

方法

それでは、具体的なやり方を紹介します。

【手順1】アイコンファイルをリソースに追加する

リソースビューから既存のアイコンファイルをインポートします。

[ソリューションエクスプローラー]から、アプリケーションのリソースファイルをダブルクリックします。

すると、[リソースビュー]が立ち上がるので、「Icon」を右クリックし、「リソースの追加」をクリックします。

[リソースの追加]ダイアログが開くので、「インポート」をクリック。

出てきたダイアログから、作成しておいたアイコンファイル(.ico)を選択します。

すると、こんな感じでアイコンファイルがリソースに追加されます。

Visual Studioでは[リソースビュー]を使うと、exeに含まれているリソースを確認することができます。アイコンファイルの場合は、ダブルクリックでエディタを開くことも可能です。

【手順2】Resource.hを開く

[ヘッダーファイル]フォルダから、Resource.hを開きます。

【手順3】アイコンにしたいリソースのIDを最小に変更する

Resource.hを開いたら、ICONファイルのIDが定義されている箇所を探します。

オレンジで囲った部分がアイコンリソースのIDとなります。例として、「IDI_ICON2」を実行ファイルのアイコンにしてみましょう。

IDI_ICON2のIDをアイコンリソースのうち最小のIDに設定します。

ここでは125を割り当ててみました。ほかのアイコンよりも小さい値にすれば、なんでもOKです。

これでビルドします。

ちゃんと変わってますね。

うまくいかないときは?

 今回の方法を試しても、アイコンが変化しなかったという方もいるでしょう。

ビルドし直したはずなのに、アイコンが変更されない…

 それはおそらくエクスプローラーのキャッシュが原因です。

 Windowsエクスプローラーは、アプリケーションのアイコンをキャッシュする機能を持っています。キャッシュが働いていると、正常にアイコンを変更できていても、表示に反映されない場合があります。

 この場合は、実行ファルを別のフォルダに移すと、キャッシュがクリアされて、アイコンが再読み込みされます。なので、ビルドしたら、実行ファイル(.exe)を別フォルダに移動させてみることをおすすめします。この状態でアプリケーションを起動してみて、正しくアイコンが変更されているか確認してみてください。

場所を移動すると、アイコンのキャッシュがクリアされ、変更が適用されているか確認できます。

 注意してほしいのは、この現象はF5キーを押しても解決しません。また、アプリケーションを起動しなおした場合でも、以前のアイコンが表示されてしまいます。必ず別の場所に移動させてから、アイコンを確認するようにしてください。

まとめ

VIsualC++のアイコンを変更する方法について紹介しました。

意外につまづくのは、「うまくいかないときは?」で取り上げたキャッシュの問題かも知れませんね。ちゃんとやったはずなのに、アイコンが変わらないときは、キャッシュのせいではないかと疑ってみることをおすすめします。

コメント

タイトルとURLをコピーしました