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

Панель быстрого доступа (QAT) — это небольшая настраиваемая панель инструментов, которая предоставляет набор команд, указанных приложением или выбранных пользователем.

Введение

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

На следующем снимке экрана показан пример панели быстрого доступа (QAT) ленты.

Снимок экрана: qat на ленте Microsoft Paint.

Панель быстрого доступа (QAT) состоит из сочетания до 20 команд, указанных приложением (известный как список приложений по умолчанию) или выбранных пользователем. Панель быстрого доступа (QAT) может содержать уникальные команды, недоступные в другом месте пользовательского интерфейса ленты.

Примечание

Хотя почти все элементы управления ленты позволяют добавлять связанные с ними команды на панель быстрого доступа (QAT) через контекстное меню, показанное на следующем снимке экрана, команды, представленные во всплывающем окне контекста , не предоставляют это контекстное меню.

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

Реализация панели быстрого доступа

Как и для всех элементов управления платформы ленты Windows, для использования всех преимуществ панели быстрого доступа (QAT) требуется как компонент разметки, который управляет ее представлением на ленте, так и компонент кода, который управляет ее функциональностью.

разметку

Элемент управления Панель быстрого доступа (QAT) объявляется и связывается с идентификатором команды в разметке с помощью элемента QuickAccessToolbar . Идентификатор команды используется для идентификации и привязки панели быстрого доступа (QAT) к обработчику команд, определенному приложением.

Помимо базового обработчика команд для основной функции панели быстрого доступа (QAT), объявление необязательного атрибута элемента CustomizeCommandNameQuickAccessToolbar приводит к тому, что платформа добавляет элемент Дополнительные команды в список Команд раскрывающегося меню панели быстрого доступа (QAT), для которой требуется определить дополнительный обработчик команд.

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

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

Снимок экрана: меню qat с дополнительными командами... элемент командной строки.

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

Чтобы отобразить команды из списка приложений по умолчанию на панели инструментов быстрого доступа (QAT), атрибут ApplicationDefaults.IsChecked каждого элемента управления должен иметь значение true. На предыдущих изображениях показаны результаты задания этому атрибуту значения true для команд Save, Undo и Redo .

QuickAccessToolbar.ApplicationDefaults поддерживает три типа элементов управления ленты: Кнопка, Переключатель и Флажок.

Примечание

Windows 8 и более новые версии: поддерживаются все элементы управления на основе коллекции (ComboBox, InRibbonGallery, SplitButtonGallery и DropDownGallery).

Элементы в элементе управления коллекции могут поддерживать выделение при наведении указателя мыши. Для поддержки выделения при наведении курсора коллекция должна быть коллекцией элементов и использовать FlowMenuLayout типа VerticalMenuLayout.

В следующем примере показана базовая разметка для элемента QuickAccessToolbar .

В этом разделе кода показаны объявления Command для элемента панели быстрого доступа (QAT).

<Command Name="cmdQAT"
         Symbol="ID_QAT"
         Id="40000"/>
<Command Name="cmdCustomizeQAT"
         Symbol="ID_CUSTOM_QAT"
         Id="40001"/>

В этом разделе кода показаны объявления элементов управления для элемента панели быстрого доступа (QAT).

      <Ribbon.QuickAccessToolbar>
        <QuickAccessToolbar CommandName="cmdQAT"
                            CustomizeCommandName="cmdCustomizeQAT">
          <QuickAccessToolbar.ApplicationDefaults>
            <Button CommandName="cmdButton1"/>
            <ToggleButton CommandName="cmdMinimize"
                          ApplicationDefaults.IsChecked="false"/>
          </QuickAccessToolbar.ApplicationDefaults>
        </QuickAccessToolbar>
      </Ribbon.QuickAccessToolbar>

Код

Приложение платформы ленты должно предоставлять метод обратного вызова обработчика команд для управления панелью быстрого доступа (QAT). Этот обработчик работает аналогично обработчикам коллекции команд, за исключением того, что панель быстрого доступа (QAT) не поддерживает категории. Дополнительные сведения см. в разделе Работа с коллекциями.

Коллекция команд панели быстрого доступа (QAT) извлекается как объект IUICollection с помощью ключа свойства UI_PKEY_ItemsSource . Добавление команд на панель быстрого доступа (QAT) во время выполнения выполняется путем добавления объекта IUISimplePropertySet в IUICollection.

В отличие от коллекций команд свойство типа команды (UI_PKEY_CommandType) не требуется для объекта IUISimplePropertySet панели быстрого доступа (QAT). Однако команда должна существовать в списке по умолчанию ленты или на панели быстрого доступа (QAT). Не удается создать новую команду во время выполнения и добавить ее на панель быстрого доступа (QAT).

Примечание

Приложение ленты не может заменить IUICollection панели быстрого доступа (QAT) пользовательским объектом коллекции, производным от IEnumUnknown.

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

/* QAT COMMAND HANDLER IMPLEMENTATION */
class CQATCommandHandler
      : public CComObjectRootEx<CComMultiThreadModel>
      , public IUICommandHandler
{
  public:
    BEGIN_COM_MAP(CQATCommandHandler)
      COM_INTERFACE_ENTRY(IUICommandHandler)
    END_COM_MAP()

    // QAT command handler's Execute method
    STDMETHODIMP Execute(UINT nCmdID,
                         UI_EXECUTIONVERB verb, 
                         const PROPERTYKEY* key,
                         const PROPVARIANT* ppropvarValue,
                         IUISimplePropertySet* pCommandExecutionProperties)
    {
      UNREFERENCED_PARAMETER(nCmdID);
      UNREFERENCED_PARAMETER(verb);
      UNREFERENCED_PARAMETER(ppropvarValue);
      UNREFERENCED_PARAMETER(pCommandExecutionProperties);

      // Do not expect Execute callback for a QAT command
      return E_NOTIMPL;
    }

    // QAT command handler's UpdateProperty method
    STDMETHODIMP UpdateProperty(UINT nCmdID,
                                REFPROPERTYKEY key,
                                const PROPVARIANT* ppropvarCurrentValue,
                                PROPVARIANT* ppropvarNewValue)
    {
      UNREFERENCED_PARAMETER(nCmdID);
      UNREFERENCED_PARAMETER(ppropvarNewValue);

      HRESULT hr = E_NOTIMPL;

      if (key == UI_PKEY_ItemsSource)
      {
        ATLASSERT(ppropvarCurrentValue->vt == VT_UNKNOWN);

        CComQIPtr<IUICollection> spCollection(ppropvarCurrentValue->punkVal);

        UINT nCount;
        if (SUCCEEDED(hr = spCollection->GetCount(&nCount)))
        {
          if (nCount == 0)
          {
            // If the current Qat list is empty, then we will add a few items here.
            UINT commands[] =  { cmdSave, cmdUndo};

            int count = _countof(commands);

            for (int i = 0; i < count; i++)
            {
              PROPERTYKEY keys[1] = {UI_PKEY_CommandId};
              CComObject<CItemProperties> *pItem = NULL;
              if (SUCCEEDED(CComObject<CItemProperties>::CreateInstance(&pItem)))
              {
                PROPVARIANT vars[1];

                InitPropVariantFromUInt32(commands[i], &vars[0]);

                pItem->Initialize(NULL, _countof(vars), keys, vars);

                CComPtr<IUnknown> spUnknown;
                pItem->QueryInterface(&spUnknown);
                spCollection->Add(spUnknown);
                            
                FreePropVariantArray(_countof(vars), vars);
              }
            }
          }
          else
          {
            // Do nothing if the Qat list is not empty.
            // Return S_FALSE to indicate the callback succeeded.
            return S_FALSE; 
          }
        }
      }
    return hr;
  }
};

Сохраняемость QAT

Командные элементы и параметры панели быстрого доступа (QAT) можно сохранять в сеансах приложения с помощью функций IUIRibbon::SaveSettingsToStream и IUIRibbon::LoadSettingsFromStream . Дополнительные сведения см. в разделе Сохранение состояния ленты.

Свойства панели быстрого доступа

Платформа ленты определяет коллекцию ключей свойств для элемента управления Панель быстрого доступа (QAT).

Как правило, свойство панели быстрого доступа (QAT) обновляется в пользовательском интерфейсе ленты путем аннулирования команды, связанной с элементом управления, с помощью вызова метода IUIFramework::InvalidateUICommand . Событие недействительности обрабатывается и свойство обновляется с помощью метода обратного вызова IUICommandHandler::UpdateProperty .

Метод обратного вызова IUICommandHandler::UpdateProperty не выполняется, и приложение запросит обновленное значение свойства, пока свойство не потребуется платформе. Например, при активации вкладки и отображении элемента управления в пользовательском интерфейсе ленты или при отображении подсказки.

Примечание

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

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

Ключ свойства Примечания
UI_PKEY_ItemsSource Поддерживает IUIFramework::GetUICommandProperty (не поддерживает IUIFramework::SetUICommandProperty). IUIFramework::GetUICommandProperty возвращает указатель на объект IUICollection, представляющий команды в QAT. Каждая команда идентифицируется по идентификатору команды, который получается путем вызова метода IUISimplePropertySet::GetValue и передачи ключа свойства UI_PKEY_CommandId.

Нет ключей свойств, связанных с элементом Команды "Дополнительные команды " в раскрывающемся меню панели быстрого доступа (QAT)