關於圖示

系統會在整個使用者介面中使用圖示來代表檔案、資料夾、快捷方式、應用程式和檔等物件。 圖示函式可讓應用程式建立、載入、顯示、排列、動畫及終結圖示。 如需指定檔案類型圖示的詳細資訊,請參閱 ExtractIcon

本概觀提供下列主題的相關資訊:

圖示作用點

圖示中的其中一個圖元會指定為 作用點,也就是系統追蹤並辨識為圖示位置的點。 圖示的作用點通常是位於圖示中央的圖元。 如果您使用 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方法取得一組額外的標準系統殼層圖示

自訂圖示 是專為在特定應用程式中使用而設計,而且可以是任何設計。 使用者可以從檔案載入自訂圖示,或在執行時間建立這些圖示。 以下是數個自訂圖示。

數個自訂圖示

圖示大小

系統會使用四個圖示大小:

  • 系統小型
  • 系統大型
  • 殼層小型
  • 殼層大
  • 啟動 Windows Vista) 的 Jumbo (

系統小型圖示會顯示在視窗標題。

如需應用程式慣用圖示大小的建議,請參閱 圖示調整

變更系統小型圖示的大小

  1. 從主控台按一下 [顯示],然後按一下 [外觀]索引標籤。
  2. [專案] 清單中選取 [標題按鈕],然後設定 [大小] 欄位。

擷取系統小型圖示的大小

系統大型圖示主要供應用程式使用,但也會顯示在 [Alt+Tab] 對話方塊中。 CreateIconFromResourceDrawIconExtractAssociatedIconExtractIcon、ExtractIconExLoadIcon函式全都使用系統大型圖示。 系統大型圖示的大小是由視訊驅動程式所定義,因此無法變更。

擷取系統大型圖示的大小

CreateIcon、CreateIconFromResourceExCreateIconIndirectSHGetFileInfo函式可用來處理系統大型以外的大小圖示。

殼層小型圖示用於 Windows 檔案總管和一般對話方塊。 目前,這會預設為系統小型大小。

擷取殼層小型圖示的大小

  1. 使用 SHGetFileInfo 函式搭配 SHGFI_SHELLICONSIZE | SHGFI_SMALLICON 來擷取系統映射清單的控制碼。
  2. 然後呼叫 ImageList_GetIconSize 函式以取得圖示大小。

殼層大型圖示用於桌面上。

變更大型圖示的大小

  1. 從 主控台 ,按一下 [顯示],然後按一下 [外觀]索引標籤。
  2. [專案] 清單中選取[圖示],然後設定 [大小] 欄位, (此大小儲存在登錄中,HKEY_CURRENT_USER\Control Panel Desktop\WindowMetrics\Shell 圖示大小) 。
  3. 按一下 [加號!] 索引標籤,然後選取 [ 使用大型圖示 ] 核取方塊。

擷取殼層大型圖示的大小

  1. 使用 SHGetFileInfo 函式搭配 SHGFI_SHELLICONSIZE 來擷取系統映射清單的控制碼。
  2. 然後呼叫 ImageList_GetIconSize 函式以取得圖示大小。

填入要用於註冊視窗類別的 WNDCLASSEX 結構時,請將 hIcon 成員設定為系統大型圖示 (通常為 32x32) ,並將 hIconSm 成員設定為系統小型圖示 (通常是 16x16) 。 如需類別圖示的詳細資訊,請參閱 類別圖示

圖示建立

標準圖示已預先定義,因此不需要建立它們。 若要使用標準圖示,應用程式可以使用 LoadImage 函式取得其控制碼。 圖示控制碼HICON類型的唯一值,可識別標準或自訂圖示。

若要為應用程式建立自訂圖示,您通常會使用圖形應用程式,並在應用程式的資源定義檔案中包含 ICON 資源 。 在執行時間,您可以呼叫 LoadIconLoadImage 來擷取圖示的控制碼。 圖示資源可以包含數個不同顯示裝置的影像群組。 LoadIconLoadImage 會自動從目前顯示裝置的群組中選取最適當的圖示。

應用程式也可以使用 CreateIconIndirect 函式在執行時間建立自訂圖示,以根據 ICONINFO 結構的內容建立圖示。 GetIconInfo函式會使用作用點座標填滿結構,以及圖示之位元遮罩點陣圖和色彩點陣圖的相關資訊。

應用程式應該實作自訂圖示作為資源,而且應該使用 LoadIconLoadImage,而不是在執行時間建立圖示。 使用圖示資源可避免裝置相依性、簡化當地語系化,並讓應用程式共用圖示圖形。

CreateIconFromResourceEx函式可讓應用程式流覽系統的資源,並根據資源資料建立圖示和資料指標。 CreateIconFromResourceEx 會根據來自其他可執行檔或 DLL 的二進位資源資料來建立圖示。 應用程式必須在此函式前面呼叫 LookupIconIdFromDirectoryEx 函式和數個資源函式。 LookupIconIdFromDirectoryEx 會傳回目前顯示裝置最適當圖示資料的識別碼。

圖示顯示

您可以使用 GetIconInfo 函式擷取圖示的影像,並使用 DrawIconEx 函式加以繪製。 若要繪製圖示的預設影像,請在呼叫 DrawIconEx中指定DI_COMPAT旗標。 如果您未指定 DI_COMPAT 旗標, DrawIconEx 會使用使用者指定的影像繪製圖示。

當系統顯示圖示時,它必須從.exe或.dll檔案擷取適當的圖示影像。 系統會使用下列步驟來選取圖示影像:

  1. 選取 RT_GROUP_ICON 資源。 如果有一個以上的這類資源存在,系統會使用資源 Scrip 中列出的第一個資源。
  2. RT_GROUP_ICON 資源選取適當的 RT_ICON 映射。 如果有多個映射存在,系統會使用下列準則來選擇映射:
    • 系統會選擇最接近所要求大小的影像大小。
    • 如果存在該大小的兩個或多個影像,則會選擇符合顯示器色彩深度的影像。
    • 如果沒有影像完全符合顯示器的色彩深度,則會選擇色彩深度不超過顯示器色彩深度的影像。 如果全部超過色彩深度,則會選擇色彩深度最低的色彩深度。

注意

系統會將 8 或更多 bpp 的所有色彩深度視為相等。 因此,在相同資源中包含 16x16 256 色彩影像和 16x16 16 色彩影像沒有任何優點,系統只會選擇它遇到的第一個影像。 當顯示器處於 8-bpp 模式時,系統會選擇 16 色圖示而非 256 色圖示,並使用系統預設調色盤顯示所有圖示。

 

若要顯示動畫圖標,請使用靜態控制項,如下列程式碼片段所示。

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函式會製作圖示的實際複本。