Partager via


Persistance de l’état du ruban

L’infrastructure Windows Ribon (ruban) permet de conserver l’état de divers paramètres et préférences utilisateur entre les sessions d’application.

Introduction

Différents aspects d’un ruban, y compris les préférences de configuration et d’interaction, peuvent être personnalisés par un utilisateur au moment de l’exécution pour améliorer la convivialité et la productivité. L’infrastructure ribbon fournit les fonctionnalités permettant de conserver ces paramètres entre les sessions d’application via deux méthodes définies dans l’implémentation de l’interface IUIRibbon : IUIRibbon::LoadSettingsFromStream et IUIRibbon::SaveSettingsToStream.

Une expérience prévisible

Les instructions relatives à l’expérience utilisateur du ruban recommandent que, pour offrir l’expérience utilisateur la plus prévisible possible, les applications ruban doivent conserver l’état du ruban (à l’exception du dernier onglet sélectionné) à mesure que l’application est fermée. De cette façon, lorsque la même application est lancée, les paramètres et les personnalisations de la session précédente peuvent être restaurés et l’utilisateur peut s’attendre à continuer à interagir avec l’application de la même façon qu’il l’a quittée.

Les paramètres du ruban qui peuvent être modifiés au moment de l’exécution et conservés entre les sessions d’application sont répertoriés dans le menu contextuel Commande. Notamment :

  • Commandes ajoutées à la liste des commandes de la barre d’outils Accès rapide par l’utilisateur. Spécifié par un objet IUICollection via la clé de propriété UI_PKEY_ItemsSource .

    La capture d’écran suivante montre la commande contextuelle Ajouter à la barre d’outils Accès rapide .

    capture d’écran du menu contextuel de la commande dans le ruban Microsoft Paint.

  • État d’ancrage de la barre d’outils Accès rapide par défaut. Spécifiée par la valeur UI_CONTROLDOCK de la clé de propriété UI_PKEY_QuickAccessToolbarDock .

    Cette capture d’écran montre la barre d’outils Accès rapide dans sa barre de titre d’application par défaut et la barre d’outils Afficher l’accès rapide sous la commande du menu contextuel du ruban.

    capture d’écran du menu contextuel de la commande dans le ruban Microsoft Paint.

    Cette capture d’écran montre la barre d’outils Accès rapide sous le ruban.

    capture d’écran de la barre d’outils accès rapide ancrée sous le ruban.

  • État réduit du ruban tel que spécifié par la valeur booléenne de la clé de propriété UI_PKEY_Minimized .

    Notes

    L’état réduit du ruban n’est pas équivalent à l’état réduit du ruban. En cas de réduction, le ruban est complètement masqué et ne peut pas être interagi avec. L’infrastructure appelle cet état automatiquement si la fenêtre d’application est réduite en taille, horizontalement ou verticalement, au point que le ruban masque l’espace de travail de l’application. L’infrastructure restaure le ruban lorsque la taille de la fenêtre d’application est augmentée.

     

    Cette capture d’écran montre la commande de menu contextuel Réduire le ruban .

    capture d’écran du menu contextuel de la commande dans le ruban Microsoft Paint.

    Cette capture d’écran montre un ruban réduit.

    capture d’écran du ruban Microsoft Paint réduit.

Enregistrer les paramètres du ruban

La méthode IUIRibbon::SaveSettingsToStream écrit une représentation binaire de l’état persistant du ruban (décrit dans la section précédente) dans un objet IStream . L’application enregistre ensuite le contenu de l’objet IStream dans un fichier ou dans le Registre Windows.

L’exemple suivant illustre le code de base requis pour écrire l’état du ruban dans un objet IStream à l’aide de la méthode IUIRibbon::SaveSettingsToStream .

// 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;
}

Charger les paramètres du ruban

La méthode IUIRibbon::LoadSettingsFromStream est utilisée pour récupérer les informations d’état persistantes du ruban stockées en tant qu’objet IStream par la méthode IUIRibbon::SaveSettingsToStream . Les informations de l’objet IStream sont appliquées à l’interface utilisateur du ruban lors de l’initialisation de l’application.

L’exemple suivant illustre le code de base requis pour charger l’état du ruban à partir d’un objet IStream avec la méthode IUIRibbon::LoadSettingsFromStream .

// 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;
}

Pour des performances optimales, la méthode IUIRibbon::LoadSettingsFromStream doit être appelée à partir de la fonction de rappel IUIApplication::OnViewChanged pendant la phase d’initialisation de l’infrastructure, comme illustré dans l’exemple suivant.

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);
  ...
}

Plusieurs instances de la même application d’infrastructure de ruban peuvent gérer chaque état du ruban indépendamment en tant qu’objets IStream distincts ou en tant que groupe via un seul objet IStream.

Lors de la synchronisation de l’état du ruban entre un groupe d’instances d’application, chaque fenêtre de niveau supérieur doit écouter une notification WM_ACTIVATE . La fenêtre de niveau supérieur désactivée enregistre son état de ruban à l’aide de la méthode IUIRibbon::SaveSettingsToStream , et la fenêtre de niveau supérieur en cours d’activation charge son état de ruban à l’aide de la méthode IUIRibbon::LoadSettingsFromStream .

Barre d’outils Accès rapide