Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La interfaz IOleCommandTarget de distribución de comandos define un mecanismo simple y extensible para consultar y ejecutar comandos. Este mecanismo es más sencillo que el de IDispatch Automation porque se basa completamente en un conjunto estándar de comandos; los comandos rara vez tienen argumentos y ninguna información de tipo está implicada (la seguridad del tipo también se reduce para los argumentos de comando).
En el diseño de la interfaz de distribución de comandos, cada comando pertenece a un "grupo de comandos" que se identifica con un GUID. Por lo tanto, cualquier persona puede definir un nuevo grupo y definir todos los comandos de ese grupo sin necesidad de coordinarse con Microsoft ni con ningún otro proveedor. (Esto es básicamente el mismo medio de definición que dispinterface más dispID en Automation. Aquí se superpone, aunque este mecanismo de enrutamiento de comandos solo es para el enrutamiento de comandos y no para scripting o programación a gran escala como identificadores de Automation).
IOleCommandTarget controla los escenarios siguientes:
Cuando un objeto está activado en contexto, solo se muestran las barras de herramientas del objeto y las barras de herramientas del objeto pueden tener botones para algunos de los comandos de contenedor, como Imprimir, Vista previa, Guardar, Nuevo, Zoom y otros. (Los estándares de activación en contexto recomiendan que los objetos quiten dichos botones de sus barras de herramientas o al menos los deshabiliten. Este diseño permite habilitar esos comandos y, sin embargo, enrutarse al controlador correcto). Actualmente, no hay ningún mecanismo para que el objeto envíe estos comandos al contenedor.
Cuando un documento activo está incrustado en un contenedor de documentos activo (como Office Binder), es posible que el contenedor tenga que enviar comandos como Print, Page Setup, Properties y otros al documento activo contenido.
Este enrutamiento de comandos simple se puede controlar a través de los estándares de Automatización existentes y IDispatch. Sin embargo, la sobrecarga implicada con IDispatch es más de la necesaria aquí, por lo que IOleCommandTarget proporciona un medio más sencillo para lograr los mismos extremos:
interface IOleCommandTarget : IUnknown
{
HRESULT QueryStatus(
[in] GUID *pguidCmdGroup,
[in] ULONG cCmds,
[in,out][size_is(cCmds)] OLECMD *prgCmds,
[in,out] OLECMDTEXT *pCmdText);
HRESULT Exec(
[in] GUID *pguidCmdGroup,
[in] DWORD nCmdID,
[in] DWORD nCmdExecOpt,
[in] VARIANTARG *pvaIn,
[in,out] VARIANTARG *pvaOut);
}
El QueryStatus método aquí comprueba si se admite un conjunto determinado de comandos, el conjunto que se identifica con un GUID. Esta llamada rellena una matriz de valores OLECMD (estructuras) con la lista de comandos admitida, así como la devolución de texto que describe el nombre de un comando o información de estado. Cuando el autor de la llamada desea invocar un comando, puede pasar el comando (y el GUID establecido) a Exec junto con opciones y argumentos, obteniendo un valor devuelto.