Dela via


Bevara menyfliksområdets tillstånd

Windows Ribbon-ramverket (menyfliksområdet) ger möjlighet att bevara tillståndet för en mängd olika användarinställningar och inställningar mellan programsessioner.

Introduktion

Olika aspekter av ett menyfliksområde, inklusive konfigurations- och interaktionsinställningar, kan anpassas av en användare vid körning för att förbättra användbarhet och produktivitet. Ribbon-ramverket innehåller funktioner för att bevara dessa inställningar mellan programsessioner via två metoder som definierats i implementeringen av IUIRibbon-gränssnittet: IUIRibbon::LoadSettingsFromStream och IUIRibbon::SaveSettingsToStream.

En förutsägbar upplevelse

Riktlinjerna för användarupplevelsen i menyfliksområdet rekommenderar att menyfliksområdets program ska behålla statusen för menyfliksområdet (bortsett från den senast valda fliken) när programmet stängs för att tillhandahålla en så förutsägbar användarupplevelse som möjligt. På så sätt kan inställningarna och anpassningarna från föregående session återställas när samma program startas och användaren kan förvänta sig att fortsätta interagera med programmet på samma sätt som de lämnade det.

Menyfliksinställningar som kan ändras vid körning och bevaras mellan programsessioner visas i kommando-kontextmenyn. De omfattar:

  • Kommandon som lagts till i snabbåtkomstverktygsfältet kommandolistan av användaren. Anges av ett IUICollection- objekt via UI_PKEY_ItemsSource-egenskapsnyckeln.

    Följande skärmbild visar Lägg till i verktygsfältet Snabbåtkomst snabbmenyn Kommando.

    skärmbild av kommandokontextmenyn i menyfliksområdet Microsoft Paint.

  • Det föredragna verktygsfältet snabbåtkomst dockningstillstånd. Anges av värdet UI_CONTROLDOCK för egenskapsnyckeln UI_PKEY_QuickAccessToolbarDock.

    Den här skärmbilden visar verktygsfältet snabbåtkomst på dess standardplats för programrubrikfältet och Visa verktygsfältet Snabbåtkomst under menyfliksområdet snabbmenyn Kommando.

    skärmbild av kommandokontextmenyn i menyfliksområdet Microsoft Paint.

    Den här skärmbilden visar verktygsfältet för snabbåtkomst under menyfliksområdet.

    skärmbild av verktygsfältet för snabbåtkomst som dockas under menyfliksområdet.

  • Menyfliksområdet minimerade tillståndet enligt det booleska värdet för UI_PKEY_Minimized egenskapsnyckel.

    Notera

    Det minimerade tillståndet i menyfliksområdet är inte samma sak som det komprimerade tillståndet i menyfliksområdet. När menyfliksområdet är i komprimerat tillstånd är det helt dolt och går inte att interagera med. Ramverket anropar det här tillståndet automatiskt om programfönstret minskas i storlek, antingen vågrätt eller lodrätt, till den punkt där menyfliksområdet döljer programarbetsytan. Ramverket återställer menyfliksområdet när programfönstrets storlek ökar.

     

    Den här skärmbilden visar Minimera menyfliksområdet snabbmenyn Kommando.

    skärmbild av kommandokontextmenyn i menyfliksområdet Microsoft Paint.

    Det här skärmbilden visar ett minimerat menyfliksområde.

    skärmbild av det minimerade menyfliksområdet i Microsoft Paint.

Spara inställningar för menyfliksområdet

Metoden IUIRibbon::SaveSettingsToStream skriver en binär representation av det beständiga menyfliksområdet (beskrivs i föregående avsnitt) till ett IStream--objekt. Programmet sparar sedan innehållet i IStream-objektet till en fil eller Windows-registret.

I följande exempel visas den grundläggande kod som krävs för att skriva menyfliksområdets tillstånd till ett IStream--objekt med hjälp av metoden 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;
}

Läs in inställningar för Ribbon

Metoden IUIRibbon::LoadSettingsFromStream används för att hämta den beständiga statusinformationen för menyfliksområdet som lagras som ett IStream- objekt av IUIRibbon::SaveSettingsToStream-metoden. Informationen i IStream-objektet tillämpas på menyfliksområdets användargränssnitt när programmet initieras.

I följande exempel visas den grundläggande kod som krävs för att läsa in menyfliksområdets tillstånd från ett IStream- objekt med metoden 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;
}

För optimala prestanda bör metoden IUIRibbon::LoadSettingsFromStream anropas från metoden IUIApplication::OnViewChanged återanropsfunktion under ramverkets initieringsfas, enligt följande exempel.

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

Flera instanser av samma Ribbon Framework-program kan hantera varje menyflikstillstånd separat som separat IStream- objekt eller som en grupp via ett enda IStream-objekt.

När menyfliksområdet synkroniseras mellan en grupp programinstanser måste varje fönster på den översta nivån lyssna efter ett WM_ACTIVATE meddelande. Det övre fönstret som inaktiveras sparar dess menyfliksområde med hjälp av metoden IUIRibbon::SaveSettingsToStream och det övre fönstret som aktiveras läser in dess menyfliksområde med hjälp av metoden IUIRibbon::LoadSettingsFromStream.

Verktygsfältet Snabbåtkomst