Beibehalten des Menübandzustands

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

Einführung

Verschiedene Aspekte eines Menübands, einschließlich Konfigurations- 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 über Anwendungssitzungen hinweg über zwei Methoden, die in der Implementierung der IUIRibbon-Schnittstelle definiert sind: IUIRibbon::LoadSettingsFromStream und IUIRibbon::SaveSettingsToStream.

Eine vorhersagbare Erfahrung

Die Menüband-Benutzerfreundlichkeitsrichtlinien empfehlen, dass Menübandanwendungen den Status des Menübands (abgesehen von der zuletzt ausgewählten Registerkarte) beibehalten sollten, wenn die Anwendung geschlossen wird, um eine möglichst vorhersagbare Benutzererfahrung zu bieten. 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 auf die gleiche Weise mit der Anwendung interagiert, wie er sie verlassen hat.

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

Menüband speichern Einstellungen

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 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üband Einstellungen

Die IUIRibbon::LoadSettingsFromStream-Methode wird verwendet, um die persistenten Menübandzustandsinformationen abzurufen, die von der IUIRibbon::SaveSettingsToStream-Methode als IStream-Objekt gespeichert werden. 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 Frameworkin initialisierungsphase von der IUIApplication::OnViewChanged-Rückruffunktion 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 Menübandframeworkanwendung können jeden Menübandzustand unabhängig voneinander als separate IStream-Objekte oder als Gruppe über ein einzelnes IStream-Objekt verwalten.

Beim Synchronisieren des Menübandzustands über eine Gruppe von Anwendungsinstanzen hinweg muss jedes Fenster der obersten Ebene auf eine WM _ ACTIVATE-Benachrichtigung lauschen. Das deaktivierte Fenster der obersten Ebene speichert seinen Menübandzustand mithilfe der IUIRibbon::SaveSettingsToStream-Methode, und das aktivierte Fenster der obersten Ebene lädt seinen Menübandzustand mithilfe der IUIRibbon::LoadSettingsFromStream-Methode.

Symbolleiste für den Schnellzugriff