Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Befehlsversandschnittstelle IOleCommandTarget definiert einen einfachen und erweiterbaren Mechanismus zum Abfragen und Ausführen von Befehlen. Dieser Mechanismus ist einfacher als Automatisierung IDispatch , da er vollständig auf einem Standardsatz von Befehlen basiert; Befehle weisen selten Argumente auf, und es sind keine Typinformationen beteiligt (die Typsicherheit wird auch für Befehlsargumente verringert).
Im Entwurfs der Befehlsversandschnittstelle gehört jeder Befehl zu einer "Befehlsgruppe", die selbst mit einer GUID identifiziert wird. Daher kann jeder eine neue Gruppe definieren und alle Befehle innerhalb dieser Gruppe definieren, ohne dass sie mit Microsoft oder einem anderen Anbieter koordiniert werden müssen. (Dies ist im Wesentlichen das gleiche Definitionsmittel wie ein Dispinterface plus DispIDs in der Automatisierung. Hier gibt es Überschneidungen, obwohl dieser Befehls-Routing-Mechanismus nur für das Befehls-Routing und nicht für das Skripting/die Programmierbarkeit in großem Maßstab gilt, wie es bei Automation der Fall ist.)
IOleCommandTarget behandelt die folgenden Szenarien:
Wenn ein Objekt aktiviert ist, werden in der Regel nur die Symbolleisten des Objekts angezeigt, und die Symbolleisten des Objekts enthalten möglicherweise Schaltflächen für einige containerbefehle wie "Drucken", " Seitenansicht", " Speichern", " Neu", "Zoom" und andere. (Direkte Aktivierungsstandards empfehlen, dass Objekte solche Schaltflächen aus ihren Symbolleisten entfernen oder zumindest deaktivieren. Mit diesem Design können diese Befehle aktiviert und dennoch an den richtigen Handler weitergeleitet werden.) Derzeit gibt es keinen Mechanismus, mit dem das Objekt diese Befehle an den Container verteilen kann.
Wenn ein aktives Dokument in einen aktiven Dokumentcontainer (z. B. Office-Ordner) eingebettet ist, muss der Container möglicherweise Befehle wie "Drucken", " Seite einrichten", "Eigenschaften" und andere an das enthaltene aktive Dokument senden.
Dieses einfache Befehlsrouting könnte über vorhandene Automatisierungsstandards und IDispatch abgewickelt werden. Der mit IDispatch verbundene Aufwand ist jedoch mehr als hier erforderlich, deshalb bietet IOleCommandTarget ein einfacheres Mittel, um die gleichen Ziele zu erreichen.
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);
}
Die QueryStatus methode hier testet, ob eine bestimmte Gruppe von Befehlen, die mit einer GUID identifiziert wird, unterstützt wird. Dieser Aufruf füllt ein Array von OLECMD-Werten (Strukturen) mit der unterstützten Liste der Befehle und gibt Text zurück, der den Namen eines Befehls und/oder Statusinformationen beschreibt. Wenn der Aufrufer einen Befehl aufrufen möchte, kann er den Befehl (und die festgelegte GUID) Exec zusammen mit Optionen und Argumenten übergeben, um einen Rückgabewert zurückzugeben.