アイコンについて

システムは、ユーザー インターフェイス全体でアイコンを使用して、ファイル、フォルダー、ショートカット、アプリケーション、ドキュメントなどのオブジェクトを表します。 アイコン関数を使用すると、アプリケーションでアイコンの作成、読み込み、表示、配置、アニメーション化、破棄を行えます。 ファイルの種類のアイコンの指定については、「 ExtractIcon」を参照してください。

この概要では、次のトピックに関する情報を提供します。

アイコン のホット スポット

アイコン内のピクセルの 1 つが ホット スポットとして指定されます。これは、システムが追跡し、アイコンの位置として認識するポイントです。 アイコンのホット スポットは、通常、アイコンの中央にあるピクセルです。 CreateIconIndirect 関数を使用してアイコンを作成する場合は、任意のピクセルをホット スポットとして指定できます。

アイコンの種類

オペレーティング システムには、任意のアプリケーションでいつでも使用できる標準アイコンのセットが用意されています。 ソフトウェア開発キット (SDK) ヘッダー ファイルには 、システム アイコン の識別子が含まれています。識別子は 、IDI_ プレフィックスで始まります。

説明
IDI_APPLICATION
MAKEINTRESOURCE(32512)
既定のアプリケーション アイコン
IDI_ERROR
MAKEINTRESOURCE(32513)
エラー アイコン
IDI_QUESTION
MAKEINTRESOURCE(32514)
疑問符アイコン
IDI_WARNING
MAKEINTRESOURCE(32515)
警告アイコン
IDI_INFORMATION
MAKEINTRESOURCE(32516)
情報アイコン
IDI_WINLOGO
MAKEINTRESOURCE(32517)
Windows ロゴ アイコン
IDI_SHIELD
MAKEINTRESOURCE(32518)
セキュリティ シールド アイコン

標準アイコンの推奨される使用方法については、「 ガイドライン 」を参照してください。

また、Windows Vista 以降では、SHGetStockIconInfo メソッドを使用して、標準のシステム シェル アイコンの追加セットを使用できます。

カスタム アイコン は、特定のアプリケーションで使用するように設計されており、任意のデザインにすることができます。 ユーザーは、ファイルからカスタム アイコンを読み込んだり、実行時に作成したりできます。 いくつかのカスタム アイコンを次に示します。

いくつかのカスタム アイコン

アイコンのサイズ

システムでは、次の 4 つのアイコン サイズが使用されます。

  • システムが小さい
  • システムが大きい
  • シェルが小さい
  • シェルが大きい
  • ジャンボ (Windows Vista 以降)

システムの小さいアイコンがウィンドウ キャプションに表示されます。

アプリケーションに適したアイコン サイズに関する推奨事項については、「アイコンの スケーリング 」を参照してください。

システムの小さいアイコンのサイズを変更するには

  1. コントロール パネルから、[表示] をクリックし、[外観] タブをクリックします。
  2. [アイテム] ボックスの一覧から [キャプション ボタン] を選択し、[サイズ] フィールドを設定します。

システムの小さいアイコンのサイズを取得するには

  • SM_CXSMICONとSM_CYSMICONを使用して GetSystemMetrics 関数を呼び出します

システムの大きなアイコンは主にアプリケーションで使用されますが、Alt + Tab ダイアログにも表示されます。 CreateIconFromResourceDrawIconExtractAssociatedIconExtractIconExtractIconExLoadIcon 関数はすべて、システムの大きなアイコンを使用します。 システムの大きなアイコンのサイズはビデオ ドライバーによって定義されるため、変更できません。

システムの大きなアイコンのサイズを取得するには

  • SM_CXICONとSM_CYICONを使用して GetSystemMetrics呼び出します。

CreateIconCreateIconFromResourceExCreateIconIndirectおよび SHGetFileInfo 関数を使用すると、システムサイズ以外のサイズのアイコンを操作できます。

シェルの小さいアイコンは、Windows エクスプローラーと一般的なダイアログで使用されます。 現在、これはシステムのサイズが小さい既定値です。

シェルの小さいアイコンのサイズを取得するには

  1. を指定して SHGetFileInfo 関数 SHGFI_SHELLICONSIZE | SHGFI_SMALLICON を使用して、システム イメージ リストへのハンドルを取得します。
  2. 次に 、ImageList_GetIconSize 関数を呼び出してアイコン のサイズを取得します。

シェルの大きなアイコンは、デスクトップで使用されます。

大きなアイコンのサイズを変更するには

  1. コントロール パネルから、[表示] をクリックし、[外観] タブをクリックします。
  2. [アイテム] リストから [アイコン] を選択し、[サイズ] フィールドを設定します (このサイズはレジストリの [HKEY_CURRENT_USER\Control Panel、Desktop\WindowMetrics\Shell Icon Size] の下に格納されます)。
  3. [プラス] タブをクリックし、[大きなアイコンを使用する] チェックボックスを選択します。

シェルの大きなアイコンのサイズを取得するには

  1. システム イメージ リストへのハンドルを取得するには、SHGFI_SHELLICONSIZESHGetFileInfo 関数を使用します。
  2. 次に 、ImageList_GetIconSize 関数を呼び出してアイコン のサイズを取得します。

ウィンドウ クラスの登録に使用する WNDCLASSEX 構造体を入力する場合は、 hIcon メンバーをシステムの大きなアイコン (通常は 32x32) に設定し、 hIconSm メンバーをシステムの小さいアイコン (通常は 16x16) に設定します。 クラス アイコンの詳細については、「 クラス アイコン」を参照してください。

アイコンの作成

標準アイコンは定義済みであるため、作成する必要はありません。 標準アイコンを使用するために、アプリケーションは LoadImage 関数を使用してハンドルを取得できます。 アイコン ハンドルは、標準アイコンまたはカスタム アイコンを識別する HICON 型の一意の値です。

アプリケーションのカスタム アイコンを作成するには、通常、グラフィックス アプリケーションを使用し、アプリケーションのリソース定義ファイルに ICON リソース を含めます。 実行時に、 LoadIcon または LoadImage を呼び出して、アイコンへのハンドルを取得できます。 アイコン リソースには、複数の異なるディスプレイ デバイスの画像のグループを含めることができます。 LoadIconLoadImage は、現在のディスプレイ デバイスのグループから最も適切なアイコンを自動的に選択します。

アプリケーションでは、 実行時に CreateIconIndirect 関数を使用してカスタム アイコンを作成することもできます。この関数は、 ICONINFO 構造体の内容に基づいてアイコンを作成します。 GetIconInfo 関数は、アイコンのビットマスク ビットマップとカラー ビットマップに関するホット スポット座標と情報を構造体に格納します。

アプリケーションでは、実行時にアイコンを作成するのではなく、カスタム アイコンをリソースとして実装し、 LoadIcon または LoadImage を使用する必要があります。 アイコン リソースを使用すると、デバイスの依存を回避し、ローカライズを簡略化し、アプリケーションでアイコン図形を共有できます。

CreateIconFromResourceEx 関数を使用すると、アプリケーションはシステムのリソースを参照し、リソース データに基づいてアイコンとカーソルを作成できます。 CreateIconFromResourceEx は、他の実行可能ファイルまたは DLL からのバイナリ リソース データに基づいてアイコンを作成します。 アプリケーションは、 LookupIconIdFromDirectoryEx 関数といくつかのリソース関数の呼び出しで、この関数の前に置く必要があります。 LookupIconIdFromDirectoryEx は、現在のディスプレイ デバイスに最も適したアイコン データの識別子を返します。

アイコンの表示

GetIconInfo 関数を使用してアイコンのイメージを取得し、DrawIconEx 関数を使用して描画できます。 アイコンの既定のイメージを描画するには、DrawIconEx の呼び出しで DI_COMPAT フラグを指定します。 DI_COMPAT フラグを指定しない場合、DrawIconEx は、ユーザーが指定したイメージを使用してアイコンを描画します。

システムがアイコンを表示するときは、.exeまたは.dll ファイルから適切なアイコン イメージを抽出する必要があります。 システムでは、次の手順を使用してアイコン イメージを選択します。

  1. RT_GROUP_ICON リソースを選択します。 このようなリソースが複数存在する場合、システムはリソース・スクリップにリストされている最初のリソースを使用します。
  2. RT_GROUP_ICON リソースから適切なRT_ICON イメージを選択します。 複数のイメージが存在する場合、システムは次の条件を使用してイメージを選択します。
    • 要求されたサイズに最も近いサイズのイメージが選択されます。
    • そのサイズの画像が 2 つ以上存在する場合は、ディスプレイの色深度に一致するものが選択されます。
    • ディスプレイの色深度と完全に一致する画像がない場合は、ディスプレイの色深度を超えない色深度が最も大きい画像が選択されます。 すべて色深度を超える場合は、色深度が最も低いものが選択されます。

Note

システムでは、8 個以上の bpp のすべての色深度が等しいとして扱われます。 したがって、同じリソースに 16 x 16 256 色のイメージと 16 x 16 16 色のイメージを含めるという利点はありません。システムでは、最初に検出されたものを選択するだけです。 ディスプレイが 8-bpp モードの場合、システムは 256 色のアイコンの上に 16 色のアイコンを選択し、システムの既定のパレットを使用してすべてのアイコンを表示します。

 

アニメーション化されたアイコンを表示するには、次のコード フラグメントに示すように静的コントロールを使用します。

hIcon = LoadImage(NULL, "ico.ani", IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
SendMessage( hStatic, STM_SETIMAGE, IMAGE_ICON, (LPARAM)(UINT)hIcon);

アイコンの破棄

CreateIconIndirect 関数を使用して作成したアイコンがアプリケーションに不要になった場合は、アイコンを破棄する必要があります。 DestroyIcon 関数は、アイコン ハンドルを破棄し、アイコンで使用されているメモリを解放します。 アプリケーションでは、 CreateIconIndirect で作成されたアイコンに対してのみこの関数を使用する必要があります。他のアイコンを破棄する必要はありません。

アイコンの重複

CopyIcon 関数は、アイコン ハンドルをコピーします。 これにより、アプリケーションまたは DLL は、別のモジュールが所有するアイコンに対する独自のハンドルを取得できます。 その後、もう一方のモジュールが解放された場合でも、アイコンをコピーしたアプリケーションはアイコンを使用できます。

CopyImage 関数は、指定したソース アイコンに基づいて新しいアイコンを作成します。 新しいアイコンは、ソース アイコンよりも大きくまたは小さくすることができます。

実行可能ファイル (.exe) 内のアイコン リソースの追加、削除、または置換の詳細については、「 リソース」を参照してください。

DuplicateIcon 関数は、アイコンの実際のコピーを作成します。