Сохранение состояния ленты

Платформа Windows Ribon (лента) позволяет сохранять состояние различных пользовательских параметров и настроек в сеансах приложений.

Введение

Различные аспекты ленты, включая настройки конфигурации и взаимодействия, могут быть настроены пользователем во время выполнения для повышения удобства использования и производительности. Платформа ленты предоставляет функциональные возможности для сохранения этих параметров в сеансах приложений с помощью двух методов, определенных в реализации интерфейса IUIRibbon : IUIRibbon::LoadSettingsFromStream и IUIRibbon::SaveSettingsToStream.

Прогнозируемое взаимодействие

В рекомендациях по взаимодействию с пользователем ленты рекомендуется, чтобы обеспечить максимально прогнозируемое взаимодействие с пользователем, приложения ленты должны сохранять состояние ленты (кроме последней выбранной вкладки) при закрытии приложения. Таким образом, при запуске того же приложения можно восстановить параметры и настройки из предыдущего сеанса, и пользователь сможет продолжать взаимодействовать с приложением так же, как он покинул его.

Параметры ленты, которые можно изменить во время выполнения и сохранить в сеансах приложений, перечислены в контекстном меню Команда. В их число входят следующие:

  • Команды, добавленные пользователем в список команд панели быстрого доступа . Определяется объектом IUICollection с помощью ключа свойства UI_PKEY_ItemsSource .

    На следующем снимке экрана показано контекстное меню Добавить в панель быстрого доступа На панели инструментов .

    Снимок экрана: контекстное меню команды на ленте Microsoft Paint.

  • Предпочтительное состояние закрепления панели быстрого доступа . Определяется значением UI_CONTROLDOCK ключа свойства UI_PKEY_QuickAccessToolbarDock .

    На этом снимке экрана показана панель быстрого доступа в строке заголовка приложения по умолчанию и панель быстрого доступа под контекстным меню ленты Команда.

    Снимок экрана: контекстное меню команды на ленте Microsoft Paint.

    На этом снимке экрана показана панель быстрого доступа под лентой.

    Снимок экрана: панель быстрого доступа, закрепленная под лентой.

  • Состояние ленты свернуто в соответствии с логическим значением ключа свойства UI_PKEY_Minimized .

    Примечание

    Свернутое состояние ленты не эквивалентно состоянию свернутого ленты. В свернутом состоянии лента полностью скрыта и не может взаимодействовать с ней. Платформа вызывает это состояние автоматически, если размер окна приложения уменьшается по горизонтали или вертикали до такой степени, что лента скрывает рабочую область приложения. Платформа восстанавливает ленту при увеличении размера окна приложения.

     

    На этом снимке экрана показана команда свернуть контекстное меню ленты .

    Снимок экрана: контекстное меню команды на ленте Microsoft Paint.

    На этом снимке экрана показана свернутая лента.

    Снимок экрана: свернутая лента Microsoft Paint.

Сохранение параметров ленты

Метод IUIRibbon::SaveSettingsToStream записывает двоичное представление состояния постоянной ленты (описано в предыдущем разделе) в объект IStream . Затем приложение сохраняет содержимое объекта IStream в файл или реестр Windows.

В следующем примере показан базовый код, необходимый для записи состояния ленты в объект IStream с помощью метода 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;
}

Загрузка параметров ленты

Метод IUIRibbon::LoadSettingsFromStream используется для получения сведений о состоянии постоянной ленты, хранящихся как объект IStream методом IUIRibbon::SaveSettingsToStream . Сведения в объекте IStream применяются к пользовательскому интерфейсу ленты при инициализации приложения.

В следующем примере показан базовый код, необходимый для загрузки состояния ленты из объекта IStream с помощью метода 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;
}

Для оптимальной производительности метод IUIRibbon::LoadSettingsFromStream должен вызываться из функции обратного вызова IUIApplication::OnViewChanged на этапе инициализации платформы, как показано в следующем примере.

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

Несколько экземпляров одного приложения платформы ленты могут управлять каждым состоянием ленты независимо как отдельными объектами IStream или группой с помощью одного объекта IStream.

При синхронизации состояния ленты в группе экземпляров приложения каждое окно верхнего уровня должно прослушивать уведомление WM_ACTIVATE . Деактивированное окно верхнего уровня сохраняет состояние ленты с помощью метода IUIRibbon::SaveSettingsToStream , а активируемое окно верхнего уровня загружает состояние ленты с помощью метода IUIRibbon::LoadSettingsFromStream .

Панель быстрого доступа