Meldungsbehandlung und Befehlsziele

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 dasselbe Mittel der Definition wie eineDispinterface plus dispIDs in der Automatisierung. Hier gibt es Überlappungen, obwohl dieser Befehlsroutingmechanismus nur für das Befehlsrouting und nicht für skripting/programmierbarkeit im großen Maßstab als Automatisierungshandles dient.)

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 kann über vorhandene Automatisierungsstandards und IDispatch. Der aufwand IDispatch ist jedoch mehr als hier erforderlich, bietet also IOleCommandTarget ein einfacheres Mittel, um die gleichen Enden 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.

Siehe auch

Aktive Dokumente-Container