Symbolleiste für den Schnellzugriff

Die Symbolleiste für den Schnellzugriff (Quick Access Toolbar, QAT) ist eine kleine, anpassbare Symbolleiste mit einer Reihe von Befehlen, die von der Anwendung angegeben oder vom Benutzer ausgewählt werden.

Einführung

Standardmäßig befindet sich die Symbolleiste für den Schnellzugriff (QAT) auf der Titelleiste des Anwendungsfensters, kann jedoch so konfiguriert werden, dass sie unterhalb des Menübands angezeigt wird. Zusätzlich zu Befehlen enthält die Symbolleiste für den Schnellzugriff (QAT) auch ein anpassbares Dropdownmenü, das die vollständige Reihe der Standardbefehle der Symbolleiste für den Schnellzugriff (QAT) enthält (Ein- oder Ausblenden auf der Symbolleiste für den Schnellzugriff (QAT), eine Reihe von Optionen auf der Symbolleiste für den Schnellzugriff (QAT) sowie Menübandoptionen).

Der folgende Screenshot zeigt ein Beispiel der Symbolleiste für den Schnellzugriff des Menübands (Ribbon Quick Access Toolbar, QAT).

Screenshot der QAT auf dem Microsoft Paint-Menüband.

Die Symbolleiste für den Schnellzugriff (QAT) besteht aus einer Kombination aus bis zu 20 Befehlen, die entweder von der Anwendung (als Anwendungsstandardliste bezeichnet) oder vom Benutzer festgelegt werden. Die Symbolleiste für den Schnellzugriff (QAT) kann eindeutige Befehle enthalten, die an anderer Stelle auf der Menüband-Benutzeroberfläche nicht verfügbar sind.

Hinweis

Während bei fast allen Menüband-Steuerelementen die ihnen zugeordneten Befehle der Symbolleiste für den Schnellzugriff (QAT) über das Kontextmenü (siehe folgenden Screenshot) hinzugefügt werden können, wird bei Befehlen, die in Kontext-Popupfenstern angezeigt werden, dieses Kontextmenü nicht angezeigt.

Screenshot des Befehlskontextmenüs auf dem Microsoft Paint-Menüband.

Implementieren der Symbolleiste für den Schnellzugriff

Wie bei allen Steuerelementen des Windows-Menüband-Frameworks erfordert die vollständige Nutzung der Symbolleiste für den Schnellzugriff (QAT) sowohl eine Markupkomponente, die die Darstellung auf dem Menüband steuert, als auch eine Codekomponente, die die Funktionalität steuert.

Markup

Das Steuerelement der Symbolleiste für den Schnellzugriff (QAT) wird im Markup über das QuickAccessToolbar-Element deklariert und einer Befehls-ID zugeordnet. Die Befehls-ID wird verwendet, um die Symbolleiste für den Schnellzugriff (QAT) zu identifizieren und an einen von der Anwendung definierten Befehlshandler zu binden.

Zusätzlich zur Funktion des grundlegenden Befehlshandlers für die primäre Symbolleiste für den Schnellzugriff (QAT) führt das Deklarieren des optionalen CustomizeCommandName QuickAccessToolbar-Elementattributs dazu, dass das Framework zur Befehlsliste des Dropdownmenüs der Symbolleiste für den Schnellzugriff (QAT) das Element Weitere Befehle hinzufügt, dass einen sekundären Befehlshandler erfordert.

Der Konsistenz in allen Menübandanwendungen halber wird empfohlen, dass der CustomizeCommandName-Befehlshandler ein Anpassungsdialogfeld für die Symbolleiste für den Schnellzugriff (QAT) startet. Da das Menüband-Framework nur den Startpunkt auf der Benutzeroberfläche bereitstellt, ist die Anwendung allein für die Bereitstellung der Anpassungsdialogfeld-Implementierung verantwortlich, wenn die Rückrufbenachrichtigung für diesen Befehl empfangen wird.

Der folgende Screenshot zeigt ein Dropdownmenü der Symbolleiste für den Schnellzugriff (QAT) mit dem Befehlselement „Weitere Befehle“.

Screenshot eines QAT-Menüs mit dem Befehlselement „Weitere Befehle“.

Die Anwendungsstandardliste der Symbolleiste für den Schnellzugriff (QAT) wird über die Eigenschaft QuickAccessToolbar.ApplicationDefaults angegeben. Diese steht für eine Standardliste der empfohlenen Befehle, die alle im Dropdownmenü der Symbolleiste für den Schnellzugriff (QAT) aufgeführt sind.

Zum Anzeigen von Befehlen aus der Anwendungsstandardliste in der Symbolleiste für den Schnellzugriff (QAT) muss das ApplicationDefaults.IsChecked-Attribut der einzelnen Steuerelemente den Wert true aufweisen. Die vorherigen Bilder zeigen die Ergebnisse der Einstellung dieses Attributs als true für die Befehle Speichern, Rückgängig machen und Wiederholen.

QuickAccessToolbar.ApplicationDefaults unterstützt drei Arten von Menüband-Steuerelementen: Schaltfläche, Umschaltfläche und Kontrollkästchen.

Hinweis

Windows 8 und höher: Alle katalogbasierten Steuerelemente werden unterstützt (ComboBox, InRibbonGallery, SplitButtonGallery und DropDownGallery).

Elemente in einem Katalogsteuerelement unterstützen das Hervorheben beim Darüberfahren mit dem Mauszeiger. Zur Unterstützung der Hervorhebung beim Darüberfahren mit dem Mauszeiger muss der Katalog ein Elementkatalog sein und ein FlowMenuLayout vom Typ VerticalMenuLayout verwenden.

Das folgende Beispiel veranschaulicht das grundlegende Markup eines QuickAccessToolbar-Elements.

Dieser Codeabschnitt zeigt die Befehlsdeklarationen für ein Element der Symbolleiste für den Schnellzugriff (QAT).

<Command Name="cmdQAT"
         Symbol="ID_QAT"
         Id="40000"/>
<Command Name="cmdCustomizeQAT"
         Symbol="ID_CUSTOM_QAT"
         Id="40001"/>

Dieser Codeabschnitt zeigt die Steuerelementdeklarationen bei einem Element der Symbolleiste für den Schnellzugriff (QAT).

      <Ribbon.QuickAccessToolbar>
        <QuickAccessToolbar CommandName="cmdQAT"
                            CustomizeCommandName="cmdCustomizeQAT">
          <QuickAccessToolbar.ApplicationDefaults>
            <Button CommandName="cmdButton1"/>
            <ToggleButton CommandName="cmdMinimize"
                          ApplicationDefaults.IsChecked="false"/>
          </QuickAccessToolbar.ApplicationDefaults>
        </QuickAccessToolbar>
      </Ribbon.QuickAccessToolbar>

Code

Die Anwendung des Menüband-Frameworks muss eine Befehlshandler-Rückrufmethode bereitstellen, damit die Symbolleiste für den Schnellzugriff (QAT) bearbeitet werden kann. Dieser Handler funktioniert ähnlich wie ein Befehlskataloghandler, abgesehen davon, dass die Symbolleiste für den Schnellzugriff (QAT) Kategorien nicht unterstützt. Weitere Informationen finden Sie unter Verwenden von Katalogen.

Die Sammlung der Symbolleiste für den Schnellzugriff (QAT) wird als IUICollection-Objekt über den UI_PKEY_ItemsSource-Eigenschaftsschlüssel abgerufen. Das Hinzufügen von Befehlen zur Symbolleiste für den Schnellzugriff (QAT) zur Laufzeit erfolgt durch Hinzufügen eines IUISimplePropertySet-Objekts zu IUICollection.

Im Gegensatz zu Befehlskatalogen ist die Befehlstypeigenschaft (UI_PKEY_CommandType) für das IUISimplePropertySet-Objekt der Symbolleiste für den Schnellzugriff nicht erforderlich. Der Befehl muss jedoch auf dem Menüband oder in der Standardliste der Anwendung der Symbolleiste für den Schnellzugriff (QAT) vorhanden sein. Zur Laufzeit kann kein neuer Befehl erstellt und der Symbolleiste für den Schnellzugriff (QAT) hinzugefügt werden.

Hinweis

Die Menübandanwendung kann IUICollection der Symbolleiste für den Schnellzugriff (QAT) nicht durch ein benutzerdefiniertes Sammlungsobjekt ersetzen, das von IEnumUnknown abgeleitet wurde.

Im folgenden Beispiel wird eine grundlegende Implementierung des Befehlshandlers für die Symbolleiste für den Schnellzugriff (QAT) veranschaulicht.

/* QAT COMMAND HANDLER IMPLEMENTATION */
class CQATCommandHandler
      : public CComObjectRootEx<CComMultiThreadModel>
      , public IUICommandHandler
{
  public:
    BEGIN_COM_MAP(CQATCommandHandler)
      COM_INTERFACE_ENTRY(IUICommandHandler)
    END_COM_MAP()

    // QAT command handler's Execute method
    STDMETHODIMP Execute(UINT nCmdID,
                         UI_EXECUTIONVERB verb, 
                         const PROPERTYKEY* key,
                         const PROPVARIANT* ppropvarValue,
                         IUISimplePropertySet* pCommandExecutionProperties)
    {
      UNREFERENCED_PARAMETER(nCmdID);
      UNREFERENCED_PARAMETER(verb);
      UNREFERENCED_PARAMETER(ppropvarValue);
      UNREFERENCED_PARAMETER(pCommandExecutionProperties);

      // Do not expect Execute callback for a QAT command
      return E_NOTIMPL;
    }

    // QAT command handler's UpdateProperty method
    STDMETHODIMP UpdateProperty(UINT nCmdID,
                                REFPROPERTYKEY key,
                                const PROPVARIANT* ppropvarCurrentValue,
                                PROPVARIANT* ppropvarNewValue)
    {
      UNREFERENCED_PARAMETER(nCmdID);
      UNREFERENCED_PARAMETER(ppropvarNewValue);

      HRESULT hr = E_NOTIMPL;

      if (key == UI_PKEY_ItemsSource)
      {
        ATLASSERT(ppropvarCurrentValue->vt == VT_UNKNOWN);

        CComQIPtr<IUICollection> spCollection(ppropvarCurrentValue->punkVal);

        UINT nCount;
        if (SUCCEEDED(hr = spCollection->GetCount(&nCount)))
        {
          if (nCount == 0)
          {
            // If the current Qat list is empty, then we will add a few items here.
            UINT commands[] =  { cmdSave, cmdUndo};

            int count = _countof(commands);

            for (int i = 0; i < count; i++)
            {
              PROPERTYKEY keys[1] = {UI_PKEY_CommandId};
              CComObject<CItemProperties> *pItem = NULL;
              if (SUCCEEDED(CComObject<CItemProperties>::CreateInstance(&pItem)))
              {
                PROPVARIANT vars[1];

                InitPropVariantFromUInt32(commands[i], &vars[0]);

                pItem->Initialize(NULL, _countof(vars), keys, vars);

                CComPtr<IUnknown> spUnknown;
                pItem->QueryInterface(&spUnknown);
                spCollection->Add(spUnknown);
                            
                FreePropVariantArray(_countof(vars), vars);
              }
            }
          }
          else
          {
            // Do nothing if the Qat list is not empty.
            // Return S_FALSE to indicate the callback succeeded.
            return S_FALSE; 
          }
        }
      }
    return hr;
  }
};

QAT-Persistenz

Befehlselemente und Einstellungen der Symbolleiste für den Schnellzugriff können über Anwendungssitzungen hinweg mithilfe der Funktionen IUIRibbon::SaveSettingsToStream und IUIRibbon::LoadSettingsFromStream beibehalten werden. Weitere Informationen finden Sie unter Beibehalten des Menübandstatus.

Eigenschaften der Symbolleiste für den Schnellzugriff

Das Menüband-Framework legt eine Sammlung von Eigenschaftenschlüsseln für das Steuerelement der Symbolleiste für den Schnellzugriff (QAT) fest.

In der Regel wird eine Eigenschaft der Symbolleiste für den Schnellzugriff (QAT) auf der Menüband-Benutzeroberfläche aktualisiert, indem der dem Steuerelement zugeordnete Befehl durch einen Aufruf der IUIFramework::InvalidateUICommand-Methode ungültig wird. Das Ungültigkeitsereignis wird behandelt, und die durch die IUICommandHandler::UpdateProperty-Rückrufmethode festgelegten Eigenschaftsaktualisierungen werden festgelegt.

Die IUICommandHandler::UpdateProperty-Rückrufmethode wird nicht ausgeführt, und die Anwendung wird nach einem aktualisierten Eigenschaftswert abgefragt, bis die Eigenschaft vom Framework benötigt wird. Wenn beispielsweise eine Registerkarte aktiviert und ein Steuerelement auf der Benutzeroberfläche des Menübands oder eine QuickInfo angezeigt wird.

Hinweis

In einigen Fällen kann eine Eigenschaft über die IUIFramework::GetUICommandProperty-Methode abgerufen und mit der IUIFramework::SetUICommandProperty-Methode festgelegt werden.

In der folgenden Tabelle sind die Eigenschaftenschlüssel aufgeführt, die dem Steuerelement der Symbolleiste für den Schnellzugriff (QAT) zugeordnet sind.

Eigenschaftenschlüssel Hinweise
UI_PKEY_ItemsSource Unterstützt IUIFramework::GetUICommandProperty (unterstützt nicht IUIFramework::SetUICommandProperty).IUIFramework::GetUICommandProperty gibt einen Zeiger auf ein IUICollection-Objekt zurück, das die Befehle auf der Symbolleiste für den Schnellzugriff darstellt. Jeder Befehl wird durch die Befehls-ID identifiziert. Diese wird durch Aufrufen der IUISimplePropertySet::GetValue-Methode und Übergabe des UI_PKEY_CommandId-Eigenschaftsschlüssels abgerufen

Dem Steuerelement Weitere Befehle im Dropdownmenü der Symbolleiste für den Schnellzugriff (QAT) sind keine Eigenschaftentasten zugeordnet.