Sdílet prostřednictvím


Implementace objektu COM místní nabídky

Rozšíření místní nabídky je objekt COM implementovaný jako server pracující v procesu. Rozšíření místní nabídky musí implementovat IShellExtInit a IContextMenu rozhraní. Rozšíření místní nabídky se vytvoří, když uživatel zobrazí místní nabídku pro objekt třídy, kde je toto rozšíření zaregistrováno.

Implementace IShellExtInit

Po vytvoření instance objektu COM rozšíření místní nabídky se volá metoda IShellExtInit::Initialize. IShellExtInit::Initialize poskytuje rozšíření místní nabídky s objektem IDataObject, který obsahuje data související s objektem adresáře, na který se vztahuje místní nabídka.

IDataObject obsahuje data ve formátu CFSTR_DSOBJECTNAMES. Datový formát CFSTR_DSOBJECTNAMES je HGLOBAL, který obsahuje strukturu DSOBJECTNAMES. Struktura DSOBJECTNAMES obsahuje data o objektu adresáře, na který se vztahuje rozšíření seznamu vlastností.

IDataObject obsahuje také data ve formátu CFSTR_DS_DISPLAY_SPEC_OPTIONS. Datový formát CFSTR_DS_DISPLAY_SPEC_OPTIONS je HGLOBAL, který obsahuje DSDISPLAYSPECOPTIONS strukturu. DSDISPLAYSPECOPTIONS obsahuje konfigurační data pro použití rozšířením.

Pokud se z IShellExtInit::Initializevrátí jakákoli jiná hodnota než S_OK, rozšíření místní nabídky se nepoužije.

Parametry pidlFolder a hkeyProgID metody IShellExtInit::Initialize se nepoužívají.

Implementace IContextMenu

Po vrácení IShellExtInit::Initialize je volána metoda IContextMenu::QueryContextMenu, aby se získala položka nabídky nebo položky, které rozšíření místní nabídky přidá. Implementace QueryContextMenu je poměrně jednoduchá. Rozšíření kontextové nabídky přidává své položky nabídky pomocí funkce InsertMenuItem nebo podobné funkce. Identifikátory příkazů nabídky musí být větší nebo rovny idCmdFirst a musí být menší než idCmdLast. QueryContextMenu musí vrátit největší číselný identifikátor přidaný do nabídky plus jeden. Nejlepším způsobem, jak přiřadit identifikátory příkazů nabídky, je začít od nuly a pokračovat postupně. Pokud rozšíření místní nabídky nepotřebuje žádné položky nabídky, nemělo by jednoduše přidávat žádné položky do nabídky a vrátit nulu z QueryContextMenu.

IContextMenu::GetCommandString je volána pro načtení textových dat pro položku nabídky, například text nápovědy, který se má zobrazit pro položku nabídky. Je možné, že host místní nabídky použije řetězce Unicode, zatímco rozšíření používá řetězce ANSI. Z tohoto důvodu musí být GCS_HELPTEXTA, GCS_HELPTEXTW, GCS_VERBA a GCS_VERBW případy zpracovávány jednotlivě. Implementace této metody je volitelná.

IContextMenu::InvokeCommand se volá, když se vybere jedna z položek nabídky instalovaných rozšířením kontextového menu. Kontextová nabídka provádí nebo zahajuje požadované akce reakcí na tuto metodu.