Compartir a través de


Control de mensajes y destinos de comando

La interfaz de envío de comandos IOleCommandTarget define un mecanismo simple y extensible para consultar y ejecutar comandos. Este mecanismo es más sencillo que el de IDispatch de Automation porque se basa completamente en un conjunto estándar de comandos; los comandos rara vez tienen argumentos y no hay ninguna información de tipo implicada (la seguridad del tipo también disminuye para los argumentos de comando).

En el diseño de la interfaz de envío 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 siguientes escenarios:

  • 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 de impresión, Guardar, Nuevo, Zoom y otros. (Los estándares de activación en contexto recomiendan que los objetos quiten estos 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 Imprimir, Configurar página, Propiedades y otros al documento activo contenido.

Este enrutamiento de comandos simple se puede controlar a través de los estándares de Automation existentes y IDispatch. Sin embargo, la sobrecarga implicada en IDispatch es más de lo necesario aquí, por lo que IOleCommandTarget proporciona un medio más sencillo para lograr los mismos fines:

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 método QueryStatus 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.

Consulte también

Contenedores de documentos activos