如何實作圖示重迭處理常式
圖示重迭處理常式是同進程元件物件模型, (COM) 物件,實作為 DLL。 除了 IUnknown之外,它們還會匯出一個介面: IShellIconOverlayIdentifier。 此介面有三種方法: IShellIconOverlayIdentifier::GetOverlayInfo、 IShellIconOverlayIdentifier::GetPriority和 IShellIconOverlayIdentifier::IsMemberOf。
指示
步驟 1:實作 GetOverlayInfo
初始化期間會先呼叫 GetOverlayInfo 方法。 方法會傳回檔案的完整路徑,其中包含圖示重迭影像,以及檔案中以零起始的索引。 殼層接著會將映射新增至系統映射清單。 圖示重迭可以包含在任何標準檔案類型中,包括.exe、.dll和 .ico。
初始化完成後,Shell 會在需要顯示處理常式的圖示重迭時呼叫 GetOverlayInfo 。 方法應該會傳回初始化期間所執行的相同檔案名和索引。 雖然 Shell 會使用系統映射清單中快取的影像,而不是從檔案載入影像,但圖示重迭仍會以其檔案名和索引來識別。
步驟 2:實作 GetPriority
只有在初始化期間才會呼叫 GetPriority 方法。 它會將優先順序值指派給處理常式的圖示重迭。 此值的範圍可以從零到 100,其中 100 是最低優先順序。 此優先順序值的目的是協助殼層解決針對單一物件指定多個圖示重迭時所發生的衝突。 Shell 會先使用一組內部規則來判斷最高優先順序圖示重迭。 如果這些規則無法解決衝突, GetPriority 指派給圖示重迭的值會決定優先順序。
GetPriority所設定的優先順序值不是解決不相關圖示重迭處理常式之間衝突的可靠方式。 您的處理常式無法判斷其他處理常式所使用的優先順序值。 一般而言,您應該將值設定為零。 不過,當您已實作兩個以上的圖示重迭處理常式,可要求相同物件的圖示重迭圖示時,優先順序值會很有用。 藉由適當地設定優先順序值,您可以指定要顯示哪些要求的圖示重迭。
步驟 3:實作 IsMemberOf
Shell 會呼叫 IsMemberOf 方法,以判斷它是否應該顯示特定物件的處理常式圖示重迭。 Shell 會藉由將物件的名稱傳遞至 方法來指定物件。 如果處理常式想要顯示其圖示重迭, IsMemberOf 會 傳回S_OK。 如果沒有,則會傳回S_FALSE。
圖示重迭處理常式通常適用于特定檔案群組。 典型的範例是以特定副檔名識別的 檔案類型。 圖示重迭處理常式可以要求檔案類型所有檔案的圖示重迭。 某些處理常式只有在檔案類型的檔案處於特定狀態時,才會要求圖示重迭。 不過,圖示重迭處理常式可以自由地要求其圖示重迭,以供他們選擇的任何物件使用。