關於圖示
系統會在整個使用者介面中使用圖示來代表檔案、資料夾、快捷方式、應用程式和檔等物件。 圖示函式可讓應用程式建立、載入、顯示、排列、動畫及終結圖示。 如需指定檔案類型圖示的詳細資訊,請參閱 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 (
系統小型圖示會顯示在視窗標題。
如需應用程式慣用圖示大小的建議,請參閱 圖示調整 。
變更系統小型圖示的大小
- 從主控台按一下 [顯示],然後按一下 [外觀]索引標籤。
- 從[專案] 清單中選取 [標題按鈕],然後設定 [大小] 欄位。
擷取系統小型圖示的大小
- 使用SM_CXSMICON和SM_CYSMICON呼叫GetSystemMetrics函式。
系統大型圖示主要供應用程式使用,但也會顯示在 [Alt+Tab] 對話方塊中。 CreateIconFromResource、DrawIcon、ExtractAssociatedIcon、ExtractIcon、ExtractIconEx和LoadIcon函式全都使用系統大型圖示。 系統大型圖示的大小是由視訊驅動程式所定義,因此無法變更。
擷取系統大型圖示的大小
- 使用SM_CXICON和SM_CYICON呼叫GetSystemMetrics。
CreateIcon、CreateIconFromResourceEx、CreateIconIndirect和SHGetFileInfo函式可用來處理系統大型以外的大小圖示。
殼層小型圖示用於 Windows 檔案總管和一般對話方塊。 目前,這會預設為系統小型大小。
擷取殼層小型圖示的大小
- 使用 SHGetFileInfo 函式搭配
SHGFI_SHELLICONSIZE | SHGFI_SMALLICON
來擷取系統映射清單的控制碼。 - 然後呼叫 ImageList_GetIconSize 函式以取得圖示大小。
殼層大型圖示用於桌面上。
變更大型圖示的大小
- 從 主控台 ,按一下 [顯示],然後按一下 [外觀]索引標籤。
- 從[專案] 清單中選取[圖示],然後設定 [大小] 欄位, (此大小儲存在登錄中,HKEY_CURRENT_USER\Control Panel Desktop\WindowMetrics\Shell 圖示大小) 。
- 按一下 [加號!] 索引標籤,然後選取 [ 使用大型圖示 ] 核取方塊。
擷取殼層大型圖示的大小
- 使用 SHGetFileInfo 函式搭配 SHGFI_SHELLICONSIZE 來擷取系統映射清單的控制碼。
- 然後呼叫 ImageList_GetIconSize 函式以取得圖示大小。
填入要用於註冊視窗類別的 WNDCLASSEX 結構時,請將 hIcon 成員設定為系統大型圖示 (通常為 32x32) ,並將 hIconSm 成員設定為系統小型圖示 (通常是 16x16) 。 如需類別圖示的詳細資訊,請參閱 類別圖示。
圖示建立
標準圖示已預先定義,因此不需要建立它們。 若要使用標準圖示,應用程式可以使用 LoadImage 函式取得其控制碼。 圖示控制碼是HICON類型的唯一值,可識別標準或自訂圖示。
若要為應用程式建立自訂圖示,您通常會使用圖形應用程式,並在應用程式的資源定義檔案中包含 ICON 資源 。 在執行時間,您可以呼叫 LoadIcon 或 LoadImage 來擷取圖示的控制碼。 圖示資源可以包含數個不同顯示裝置的影像群組。 LoadIcon 和 LoadImage 會自動從目前顯示裝置的群組中選取最適當的圖示。
應用程式也可以使用 CreateIconIndirect 函式在執行時間建立自訂圖示,以根據 ICONINFO 結構的內容建立圖示。 GetIconInfo函式會使用作用點座標填滿結構,以及圖示之位元遮罩點陣圖和色彩點陣圖的相關資訊。
應用程式應該實作自訂圖示作為資源,而且應該使用 LoadIcon 或 LoadImage,而不是在執行時間建立圖示。 使用圖示資源可避免裝置相依性、簡化當地語系化,並讓應用程式共用圖示圖形。
CreateIconFromResourceEx函式可讓應用程式流覽系統的資源,並根據資源資料建立圖示和資料指標。 CreateIconFromResourceEx 會根據來自其他可執行檔或 DLL 的二進位資源資料來建立圖示。 應用程式必須在此函式前面呼叫 LookupIconIdFromDirectoryEx 函式和數個資源函式。 LookupIconIdFromDirectoryEx 會傳回目前顯示裝置最適當圖示資料的識別碼。
圖示顯示
您可以使用 GetIconInfo 函式擷取圖示的影像,並使用 DrawIconEx 函式加以繪製。 若要繪製圖示的預設影像,請在呼叫 DrawIconEx中指定DI_COMPAT旗標。 如果您未指定 DI_COMPAT 旗標, DrawIconEx 會使用使用者指定的影像繪製圖示。
當系統顯示圖示時,它必須從.exe或.dll檔案擷取適當的圖示影像。 系統會使用下列步驟來選取圖示影像:
- 選取 RT_GROUP_ICON 資源。 如果有一個以上的這類資源存在,系統會使用資源 Scrip 中列出的第一個資源。
- 從 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函式會製作圖示的實際複本。