Condividi tramite


Salvataggio permanente dello stato della barra multifunzione

Il framework Ribon di Windows (barra multifunzione) offre la possibilità di mantenere lo stato di un'ampia gamma di impostazioni utente e preferenze tra le sessioni dell'applicazione.

Introduzione

Vari aspetti di una barra multifunzione, incluse le preferenze di configurazione e interazione, possono essere personalizzati da un utente in fase di esecuzione per migliorare l'usabilità e la produttività. Il framework della barra multifunzione fornisce la funzionalità per mantenere queste impostazioni tra le sessioni dell'applicazione tramite due metodi definiti nell'implementazione dell'interfaccia IUIRibbon : IUIRibbon::LoadSettingsFromStream e IUIRibbon::SaveSettingsToStream.

Un'esperienza prevedibile

Le linee guida per l'esperienza utente della barra multifunzione consigliano che, per offrire l'esperienza utente più prevedibile possibile, le applicazioni della barra multifunzione devono mantenere lo stato della barra multifunzione (a parte l'ultima scheda selezionata) quando l'applicazione viene chiusa. In questo modo, quando viene avviata la stessa applicazione, le impostazioni e le personalizzazioni della sessione precedente possono essere ripristinate e l'utente può aspettarsi di continuare a interagire con l'applicazione nello stesso modo in cui l'ha lasciata.

Le impostazioni della barra multifunzione che possono essere modificate in fase di esecuzione e mantenute tra le sessioni dell'applicazione sono elencate nel menu di scelta rapida Comando. e comprendono:

  • Comandi aggiunti all'elenco comandi della barra di accesso rapido dall'utente. Specificato da un oggetto IUICollection tramite la chiave della proprietà UI_PKEY_ItemsSource .

    La schermata seguente mostra il comando di scelta rapida Aggiungi alla barra di scelta rapida della barra di accesso rapido .

    screenshot del menu di scelta rapida del comando nella barra multifunzione microsoft paint.

  • Stato di ancoraggio della barra di accesso rapido preferito. Specificato dal valore UI_CONTROLDOCK della chiave della proprietà UI_PKEY_QuickAccessToolbarDock .

    Questa schermata mostra la barra di accesso rapido nella posizione predefinita della barra del titolo dell'applicazione e la barra di accesso rapido sotto il comando del menu di scelta rapida della barra multifunzione .

    screenshot del menu di scelta rapida del comando nella barra multifunzione microsoft paint.

    Questa schermata mostra la barra di accesso rapido sotto la barra multifunzione.

    screenshot della barra degli strumenti di accesso rapido ancorata sotto la barra multifunzione.

  • Stato ridotto a icona della barra multifunzione come specificato dal valore booleano della chiave della proprietà UI_PKEY_Minimized .

    Nota

    Lo stato ridotto a icona della barra multifunzione non equivale allo stato compresso della barra multifunzione. Quando è in stato compresso, la barra multifunzione è completamente nascosta e non può essere interagita con. Il framework richiama automaticamente questo stato se la finestra dell'applicazione è ridotta di dimensioni, orizzontalmente o verticalmente, fino al punto in cui la barra multifunzione nasconde l'area di lavoro dell'applicazione. Il framework ripristina la barra multifunzione quando viene aumentata la dimensione della finestra dell'applicazione.

     

    Questa schermata mostra il comando Riduci a icona il menu di scelta rapida della barra multifunzione .

    screenshot del menu di scelta rapida del comando nella barra multifunzione microsoft paint.

    Questa schermata mostra una barra multifunzione ridotta a icona.

    screenshot della barra multifunzione microsoft paint ridotta a icona.

Salva impostazioni della barra multifunzione

Il metodo IUIRibbon::SaveSettingsToStream scrive una rappresentazione binaria dello stato della barra multifunzione persistente (descritta nella sezione precedente) in un oggetto IStream . L'applicazione salva quindi il contenuto dell'oggetto IStream in un file o nel Registro di sistema di Windows.

Nell'esempio seguente viene illustrato il codice di base necessario per scrivere lo stato della barra multifunzione in un oggetto IStream usando il metodo 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;
}

Caricare le impostazioni della barra multifunzione

Il metodo IUIRibbon::LoadSettingsFromStream viene usato per recuperare le informazioni sullo stato della barra multifunzione persistente archiviate come oggetto IStream dal metodo IUIRibbon::SaveSettingsToStream . Le informazioni nell'oggetto IStream vengono applicate all'interfaccia utente della barra multifunzione quando l'applicazione viene inizializzata.

Nell'esempio seguente viene illustrato il codice di base necessario per caricare lo stato della barra multifunzione da un oggetto IStream con il metodo 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;
}

Per ottenere prestazioni ottimali, il metodo IUIRibbon::LoadSettingsFromStream deve essere chiamato dalla funzione di callback IUIApplication::OnViewChanged durante la fase di inizializzazione del framework, come illustrato nell'esempio seguente.

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

Più istanze della stessa applicazione framework della barra multifunzione possono gestire ogni stato della barra multifunzione in modo indipendente come oggetti IStream separati o come gruppo tramite un singolo oggetto IStream.

Quando si sincronizza lo stato della barra multifunzione in un gruppo di istanze dell'applicazione, ogni finestra di primo livello deve essere in ascolto di una notifica di WM_ACTIVATE . La finestra di primo livello disattivata salva lo stato della barra multifunzione usando il metodo IUIRibbon::SaveSettingsToStream e la finestra di primo livello attivata carica lo stato della barra multifunzione usando il metodo IUIRibbon::LoadSettingsFromStream .

Barra di accesso rapido