關於圖示
系統會使用整個使用者介面的圖示來代表物件,例如檔案、資料夾、快捷方式、應用程式和檔。 圖示函式可讓應用程式建立、載入、顯示、排列、動畫及終結圖示。 如需指定檔案類型圖示的資訊,請參閱 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) |
![]() |
IDI_SHIELD MAKEINTRESOURCE(32518) |
![]() |
如需標準圖示建議使用方式的相關信息,請參閱 指導方針。
此外,從 Windows Vista 開始,透過 SHGetStockIconInfo 方法,即可透過 SHGetStockIconInfo 方法取得一組額外的 標準系統殼層 圖示。
自定義圖示 是專為在特定應用程式中使用而設計,而且可以是任何設計。 使用者可以從檔案載入自定義圖示,或在運行時間建立它們。 以下是數個自定義圖示。
圖示大小
系統使用四個圖示大小:
- 系統小型
- 大型系統
- 殼層小型
- 殼層大型
- 巨無霸(自 Windows Vista 開始)
系統小型圖示 會顯示在視窗標題中。
如需應用程式慣用圖示大小的建議,請參閱 圖示調整。
變更系統小型圖示的大小
- 在 [控制面板] 中,按一下 [顯示],然後按一下 [外觀索引標籤]。
- 從 [項目] 列表中選取 [標題按鈕],然後設定 [大小] 欄位。
擷取系統小型圖示的大小
- 使用 SM_CXSMICON 和 SM_CYSMICON呼叫 GetSystemMetrics 函式。
系統大型圖示 主要用於應用程式,但它也會顯示在 [Alt+Tab] 對話框中。 CreateIconFromResource、DrawIcon、ExtractAssociatedIcon、ExtractIcon、ExtractIconEx和 LoadIcon 函式全都使用系統大型圖示。 系統大型圖示的大小是由視訊驅動程式所定義,因此無法變更。
擷取系統大型圖示的大小
- 呼叫 GetSystemMetrics 使用 SM_CXICON 和 SM_CYICON。
CreateIcon、CreateIconFromResourceEx、CreateIconIndirect和 SHGetFileInfo 函式可用來處理系統大型以外的圖示。
在 Windows 檔案總管和一般對話方塊中,殼層小型圖示 被使用。 目前,這會預設為系統大小較小。
擷取殼層小型圖示的大小
- 使用 SHGetFileInfo 函式搭配
SHGFI_SHELLICONSIZE | SHGFI_SMALLICON
取得系統映像清單的控制代碼。 - 然後呼叫 ImageList_GetIconSize 函式以取得圖示大小。
殼層大型圖示會在桌面上使用。
變更大型圖示的大小
- 從 [控制面板] 中,點擊 [顯示],然後點擊 [外觀] 索引標籤,
- 從 [專案] 列表中選取 [圖示],然後設定 [Size] 字段(此大小儲存在登錄的 HKEY_CURRENT_USER\Control Panel底下,Desktop\WindowMetrics\Shell 圖示大小]。
- 按一下 Plus! 標籤頁,然後選取 使用大型圖示 複選框。
擷取殼層大型圖示的大小
- 使用 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 模式時,系統會在 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) 檔案中新增、移除或取代圖示資源的相關信息,請參閱 Resources。
DuplicateIcon 函式會製作圖示的實際複本。