Destinos del control de mensajes y de comando
La interfaz de envío IOleCommandTarget de comando define un mecanismo sencillo y extensible ver y ejecutar comandos.Este mecanismo es más sencillo que IDispatch de automatización porque se basa completamente en un conjunto estándar de comandos; los comandos tienen raramente argumentos, y no hay información de tipo implicada (seguridad de tipos se disminuye para los argumentos del comando también).
En el diseño de interfaz de envío de comando, cada comando pertenece a un “grupo de comando” que sí mismo se identifica con GUID.Por consiguiente, cualquier persona puede definir un grupo y definir todos los comandos dentro de ese grupo sin necesidad de coordinar con Microsoft o cualquier otro proveedor.(Este es esencialmente el mismo significa de definición como dispinterface más dispIDs en la automatización.Hay superposición aquí, aunque este mecanismo de enrutamiento de comandos es solo para el enrutamiento de comandos y no para el script y programación a gran escala como identificadores de automatización).
IOleCommandTarget controla los escenarios siguientes:
Cuando un objeto se haber producido en contexto, solo las barras de herramientas del objeto se muestran habitualmente y barras de herramientas de objeto pueden tener botones para algunos de los comandos del contenedor como Imprimir, ImprimirVista previa, Guardar, New, Zoom, y otros.(Las normas de activación en contexto recomienda los objetos quitan como botones de las barras de herramientas, o al menos las deshabilitados.Este diseño permite habilitar pero son enrutados a esos comandos el controlador apropiado.) Actualmente, no hay ningún mecanismo para que el objeto enviar estos comandos al contenedor.
Cuando un documento activo se incrusta en un contenedor de documento activo (como Office binder), el contenedor puede necesitar enviar los comandos tal Imprimir, PagePrograma de instalación, Propiedades, et al documento activo contenido.
Este enrutamiento de comandos simple se puede controlar con estándares existentes y IDispatchde automatización.Sin embargo, la sobrecarga implicada con IDispatch es más necesario aquí, por lo que IOleCommandTarget proporciona un más simple significa 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 de QueryStatus aquí prueba si se admite un conjunto de comandos, el conjunto de detalle que se identifica con GUID.Esta llamada rellena una matriz de valores de OLECMD (estructuras) con la lista de comandos compatible así como devuelve el texto que describe el nombre de un comando o de la información de estado.Cuando el llamador para invocar un comando, puede pasar el comando (y GUIDdeterminado) a Exec junto con las opciones y argumentos, obtener la devuelve un valor devuelto.