Implementazione dell'oggetto COM del menu di scelta rapida
Un'estensione del menu di scelta rapida è un oggetto COM implementato come server in-proc. L'estensione del menu di scelta rapida deve implementare le interfacce IShellExtInit e IContextMenu. Viene creata un'istanza di un'estensione del menu di scelta rapida quando l'utente visualizza il menu di scelta rapida per un oggetto di una classe per cui è stata registrata l'estensione del menu di scelta rapida.
Implementazione di IShellExtInit
Dopo aver creato un'istanza dell'oggetto COM dell'estensione del menu di scelta rapida, viene chiamato il metodo IShellExtInit::Initialize . IShellExtInit::Initialize fornisce l'estensione del menu di scelta rapida con un oggetto IDataObject che contiene i dati pertinenti all'oggetto directory a cui si applica il menu di scelta rapida.
L'oggetto IDataObject contiene dati nel formato CFSTR_DSOBJECTNAMES. Il formato dati CFSTR_DSOBJECTNAMES è un oggetto HGLOBAL che contiene una struttura DSOBJECTNAMES . La struttura DSOBJECTNAMES contiene dati sull'oggetto directory a cui si applica l'estensione della finestra delle proprietà.
IDataObject contiene anche i dati nel formato CFSTR_DS_DISPLAY_SPEC_OPTIONS. Il formato dei dati CFSTR_DS_DISPLAY_SPEC_OPTIONS è un oggetto HGLOBAL che contiene una struttura DSDISPLAYSPECOPTIONS . DSDISPLAYSPECOPTIONS contiene i dati di configurazione per l'uso da parte dell'estensione.
Se un valore diverso da S_OK viene restituito da IShellExtInit::Initialize, l'estensione del menu di scelta rapida non verrà usata.
I parametri pidlFolder e hkeyProgID del metodo IShellExtInit::Initialize non vengono usati.
Implementazione di IContextMenu
Dopo la restituzione di IShellExtInit::Initialize, viene chiamato il metodo IContextMenu::QueryContextMenu per ottenere la voce di menu o le voci che verranno aggiunte dall'estensione del menu di scelta rapida. L'implementazione di QueryContextMenu è piuttosto semplice. L'estensione del menu di scelta rapida aggiunge le voci di menu usando InsertMenuItem o una funzione simile. Gli identificatori dei comandi di menu devono essere maggiori o uguali a idCmdFirst e devono essere minori di idCmdLast. QueryContextMenu deve restituire l'identificatore numerico più grande aggiunto al menu più uno. Il modo migliore per assegnare gli identificatori dei comandi di menu consiste nell'iniziare a zero e lavorare in sequenza. Se l'estensione del menu di scelta rapida non richiede alcuna voce di menu, non deve semplicemente aggiungere voci al menu e restituire zero da QueryContextMenu.
IContextMenu::GetCommandString viene chiamato per recuperare i dati testuali per la voce di menu, ad esempio il testo della Guida da visualizzare per la voce di menu. È possibile che l'host del menu di scelta rapida usi stringhe Unicode mentre l'estensione usa stringhe ANSI. Per questo motivo, i casi di GCS_HELPTEXTA, GCS_HELPTEXTW, GCS_VERBA e GCS_VERBW devono essere gestiti singolarmente. L'implementazione di questo metodo è facoltativa.
IContextMenu::InvokeCommand viene chiamato quando viene selezionata una delle voci di menu installate dall'estensione del menu di scelta rapida. Il menu di scelta rapida esegue o avvia le azioni desiderate in risposta a questo metodo.