Beibehalten des Menübandstatus

Das Windows Ribon-Framework (Menüband) bietet die Möglichkeit, den Zustand einer Vielzahl von Benutzereinstellungen und -einstellungen über Anwendungssitzungen hinweg beizubehalten.

Einführung

Verschiedene Aspekte eines Menübands, einschließlich Konfiguration und Interaktionseinstellungen, können von einem Benutzer zur Laufzeit angepasst werden, um die Benutzerfreundlichkeit und Produktivität zu verbessern. Das Menübandframework bietet die Funktionalität zum Beibehalten dieser Einstellungen in Anwendungssitzungen über zwei Methoden, die in der Implementierung der IUIRibbon-Schnittstelle definiert sind: IUIRibbon::LoadSettingsFromStream und IUIRibbon::SaveSettingsToStream.

Eine vorhersagbare Benutzeroberfläche

In den Richtlinien für die Menübandbenutzeroberfläche wird empfohlen, dass Menübandanwendungen den Status des Menübands (abgesehen von der letzten ausgewählten Registerkarte) beibehalten sollten, um eine möglichst vorhersagbare Benutzererfahrung zu gewährleisten, wenn die Anwendung geschlossen wird. Auf diese Weise können beim Starten derselben Anwendung die Einstellungen und Anpassungen aus der vorherigen Sitzung wiederhergestellt werden, und der Benutzer kann davon ausgehen, dass er weiterhin mit der Anwendung auf die gleiche Weise interagiert, wie er sie verlassen hat.

Menübandeinstellungen, die zur Laufzeit geändert und anwendungsübergreifend beibehalten werden können, werden im Kontextmenü Befehl aufgeführt. Dazu gehören:

  • Befehle, die vom Benutzer der Liste Der Schnellzugriffssymbolleistenbefehle hinzugefügt wurden. Wird von einem IUICollection-Objekt über den UI_PKEY_ItemsSource Eigenschaftenschlüssel angegeben.

    Der folgende Screenshot zeigt den Kontextmenübefehl " Zur Schnellzugriffssymbolleiste hinzufügen ".

    Screenshot des Befehlskontextmenüs im Microsoft Paint-Menüband.

  • Der bevorzugte Dockingzustand der Symbolleiste für den Schnellzugriff . Wird durch den UI_CONTROLDOCK Wert des UI_PKEY_QuickAccessToolbarDock Eigenschaftenschlüssels angegeben.

    Dieser Screenshot zeigt die Symbolleiste für den Schnellzugriff in der Standardposition der Anwendungstitelleiste und die Symbolleiste für den Schnellzugriff unter dem Menüband-Kontextmenübefehl anzeigen.

    Screenshot des Befehlskontextmenüs im Microsoft Paint-Menüband.

    Dieser Screenshot zeigt die Symbolleiste für den Schnellzugriff unterhalb des Menübands.

    Screenshot der Symbolleiste für den Schnellzugriff, die unterhalb des Menübands angedockt ist.

  • Der minimierte Status des Menübands, der durch den booleschen Wert des UI_PKEY_Minimized Eigenschaftenschlüssels angegeben wird.

    Hinweis

    Der minimierte Status des Menübands entspricht nicht dem reduzierten Zustand des Menübands. Im reduzierten Zustand ist das Menüband vollständig ausgeblendet und kann nicht mit interagieren. Das Framework ruft diesen Zustand automatisch auf, wenn das Anwendungsfenster horizontal oder vertikal so verkleinert ist, dass das Menüband den Anwendungsarbeitsbereich verdeckt. Das Framework stellt das Menüband wieder her, wenn die Größe des Anwendungsfensters erhöht wird.

     

    Dieser Screenshot zeigt den Befehl Zum Minimieren des Menüband-Kontextmenüs .

    Screenshot des Befehlskontextmenüs im Microsoft Paint-Menüband.

    Dieser Screenshot zeigt ein minimiertes Menüband.

    Screenshot des minimierten Microsoft-Farbbands.

Menübandeinstellungen speichern

Die IUIRibbon::SaveSettingsToStream-Methode schreibt eine binäre Darstellung des persistenten Menübandzustands (im vorherigen Abschnitt beschrieben) in ein IStream-Objekt . Die Anwendung speichert dann den Inhalt des IStream-Objekts in einer Datei oder der Windows-Registrierung.

Im folgenden Beispiel wird der grundlegende Code veranschaulicht, der zum Schreiben des Menübandzustands in ein IStream-Objekt mithilfe der IUIRibbon::SaveSettingsToStream-Methode erforderlich ist.

// pRibbon        - Pointer to the IUIRibbon interface
// ppStatusStream - Pointer to the location of a newly created IStream object
HRESULT CApplication::SaveRibbonStatusToStream(
                        __in IUIRibbon *pRibbon, 
                        __out IStream **ppStatusStream)
{
  HRESULT hr = E_FAIL; 

  *ppStatusStream = NULL;
  IStream* pStream;
  if (SUCCEEDED(hr = CreateStreamOnHGlobal(
                       NULL,  // Internally allocate a new shared memory.
                       FALSE, // Free hGlobal after IStream object released.
                       &pStream)))
  {
    if (SUCCEEDED(hr = pRibbon->SaveSettingsToStream(*ppStatusStream)))
    {                  
      pStream->AddRef();
      *ppStatusStream = pStream;
    }
    pStream->Release();
  }
  return hr;
}

Menübandeinstellungen laden

Die IUIRibbon::LoadSettingsFromStream-Methode wird verwendet, um die persistenten Menübandstatusinformationen abzurufen, die von der IUIRibbon::SaveSettingsToStream-Methode als IStream-Objekt gespeichert sind. Die Informationen im IStream-Objekt werden auf die Menübandbenutzeroberfläche angewendet, wenn die Anwendung initialisiert wird.

Im folgenden Beispiel wird der grundlegende Code veranschaulicht, der zum Laden des Menübandzustands aus einem IStream-Objekt mit der IUIRibbon::LoadSettingsFromStream-Methode erforderlich ist.

// pRibbon       - Pointer to the IUIRibbon interface
// pStatusStream - Pointer to the IStream object that contains the Ribbon state information
HRESULT CApplication::LoadRibbonStatusFromStream(
                        __in IUIRibbon *pRibbon, 
                        __in IStream *pStatusStream)
{     
  HRESULT hr = E_FAIL;
  if (pStatusStream)
  {
    // Set the stream position to the beginning first.
    LARGE_INTEGER liStart = {0, 0};
    ULARGE_INTEGER ulActual;
    pStatusStream->Seek(liStart, STREAM_SEEK_SET, &ulActual);
    hr = pRibbon->LoadSettingsFromStream(pStatusStream);
  }
  return hr;
}

Um eine optimale Leistung zu erzielen, sollte die IUIRibbon::LoadSettingsFromStream-Methode während der Frameworkinitialisierungsphase von der Rückruffunktion IUIApplication::OnViewChanged aufgerufen werden, wie im folgenden Beispiel gezeigt.

IFACEMETHODIMP CMyRibbonApplication::OnViewChanged(
                                       UINT nViewID, 
                                       __in UI_VIEWTYPE typeID, 
                                       __in IUnknown* pView, 
                                       UI_VIEWVERB verb, 
                                       INT iReasonCode)
{
  HRESULT hr = E_NOTIMPL;
  if (UI_VIEWVERB_CREATE == verb)
  {
    IUIRibbon* pRibbon = NULL;
    hr = pView->QueryInterface(IID_PPV_ARGS(&pRibbon));

    if (SUCCEEDED(hr))
    {
      hr = _LoadRibbonSettings(pRibbon);
      pRibbon->Release();
    }
  }
  return hr;
}

HRESULT CMyRibbonApplication::_LoadRibbonSettings(IUIRibbon* pRibbon)
{
  ...
  pRibbon->LoadSettingsFromStream(pStream);
  ...
}

Mehrere Instanzen derselben Ribbon-Frameworkanwendung können jeden Menübandstatus unabhängig als separate IStream-Objekte oder als Gruppe über ein einzelnes IStream-Objekt verwalten.

Beim Synchronisieren des Menübandzustands für eine Gruppe von Anwendungsinstanzen muss jedes Fenster der obersten Ebene auf eine WM_ACTIVATE Benachrichtigung lauschen. Das fenster der obersten Ebene, das deaktiviert wird, speichert seinen Menübandstatus mithilfe der IUIRibbon::SaveSettingsToStream-Methode , und das aktivierte Fenster der obersten Ebene lädt den Menübandstatus mithilfe der IUIRibbon::LoadSettingsFromStream-Methode .

Symbolleiste für den Schnellzugriff