빠른 실행 도구 모음

QAT(빠른 실행 도구 모음)는 애플리케이션에서 지정하거나 사용자가 선택한 명령 집합을 노출하는 사용자 지정 가능한 작은 도구 모음입니다.

소개

기본적으로 QAT(빠른 실행 도구 모음)는 애플리케이션 창의 제목 표시줄에 있지만 리본 아래에 표시되도록 구성할 수 있습니다. 명령을 노출하는 것 외에도 QAT(빠른 실행 도구 모음)에는 기본 QAT(빠른 실행 도구 모음) 명령의 전체 집합(QAT(빠른 실행 도구 모음))과 QAT(빠른 실행 도구 모음) 및 리본 옵션 집합이 포함된 사용자 지정 가능한 드롭다운 메뉴가 포함되어 있습니다.

다음 스크린샷은 QAT(리본 빠른 실행 도구 모음)의 예를 보여 줍니다.

Microsoft 페인트 리본의 qat 스크린샷

QAT(빠른 실행 도구 모음)는 애플리케이션에서 지정하거나(애플리케이션 기본값 목록이라고 함) 사용자가 선택한 최대 20개의 명령 조합으로 구성됩니다. QAT(빠른 실행 도구 모음)에는 리본 UI의 다른 곳에서는 사용할 수 없는 고유한 명령이 포함될 수 있습니다.

참고

거의 모든 리본 컨트롤을 사용하면 다음 스크린샷에 표시된 상황에 맞는 메뉴를 통해 관련 명령을 QAT(빠른 실행 도구 모음)에 추가할 수 있지만 컨텍스트 팝업 에 노출된 명령은 이 상황에 맞는 메뉴를 제공하지 않습니다.

Microsoft 그림판 리본의 명령 상황에 맞는 메뉴 스크린샷

빠른 실행 도구 모음 구현

모든 Windows 리본 프레임워크 컨트롤과 마찬가지로 QAT(빠른 실행 도구 모음)를 최대한 활용하려면 리본 내에서 프레젠테이션을 제어하는 태그 구성 요소와 해당 기능을 제어하는 코드 구성 요소가 모두 필요합니다.

태그

QuickAccessToolbar 요소를 통한 태그에서 QAT(빠른 실행 도구 모음) 컨트롤이 선언되고 명령 ID와 연결됩니다. 명령 ID는 QAT(빠른 실행 도구 모음)를 식별하고 애플리케이션에서 정의한 명령 처리기에 바인딩하는 데 사용됩니다.

기본 QAT(빠른 실행 도구 모음) 기능에 대한 기본 명령 처리기 외에도 선택적 CustomizeCommandNameQuickAccessToolbar 요소 특성을 선언하면 프레임워크가 보조 명령 처리기를 정의해야 하는 QAT(빠른 실행 도구 모음) 드롭다운 메뉴의 명령 목록에 추가 명령 항목을 추가합니다.

리본 애플리케이션 간에 일관성을 유지하려면 CustomizeCommandName 명령 처리기에서 QAT(빠른 실행 도구 모음) 사용자 지정 대화 상자를 시작하는 것이 좋습니다. Ribbon 프레임워크는 UI의 시작점만 제공하므로 이 명령에 대한 콜백 알림을 받을 때 애플리케이션은 사용자 지정 대화 상자 구현을 제공하는 것만 담당합니다.

다음 스크린샷에서는 추가 명령 명령 항목이 있는 QAT(빠른 실행 도구 모음) 드롭다운 메뉴를 보여 줍니다.

더 많은 명령이 있는 qat 메뉴의 스크린샷... 명령 항목입니다.

QAT(빠른 실행 도구 모음)의 애플리케이션 기본값 목록은 권장 명령의 기본 목록을 식별하는 QuickAccessToolbar.ApplicationDefaults 속성을 통해 지정되며, 모두 QAT(빠른 실행 도구 모음) 드롭다운 메뉴에 나열됩니다.

QAT(빠른 실행 도구 모음) 도구 모음에 애플리케이션 기본값 목록의 명령을 표시하려면 각 컨트롤 요소의 ApplicationDefaults.IsChecked 특성에 값 true이 있어야 합니다. 앞의 이미지는 저장, 실행 취소다시 실행 명령에 대해 이 특성을 true 로 설정한 결과를 보여 줍니다.

QuickAccessToolbar.ApplicationDefaults단추, 토 글 단추확인란의 세 가지 유형의 리본 컨트롤을 지원합니다.

참고

Windows 8 이상: 모든 갤러리 기반 컨트롤이 지원됩니다(ComboBox, InRibbonGallery, SplitButtonGalleryDropDownGallery).

갤러리 컨트롤의 항목은 가리키기에서 강조 표시를 지원할 수 있습니다. 가리키기 강조 표시를 지원하려면 갤러리가 항목 갤러리여야 하며 VerticalMenuLayout 형식의 FlowMenuLayout 사용해야 합니다.

다음 예제에서는 QuickAccessToolbar 요소에 대한 기본 태그를 보여 줍니다.

이 코드 섹션에서는 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(빠른 실행 도구 모음) 명령 컬렉션은 UI_PKEY_ItemsSource 속성 키를 통해 IUICollection 개체로 검색됩니다. IUICollectionIUISimplePropertySet 개체를 추가하여 런타임에 QAT(빠른 실행 도구 모음)에 명령을 추가합니다.

명령 갤러리와 달리 QAT(빠른 실행 도구 모음) IUISimplePropertySet 개체에는 명령 유형 속성(UI_PKEY_CommandType)이 필요하지 않습니다. 그러나 명령은 리본 메뉴 또는 QAT(빠른 실행 도구 모음) 애플리케이션 기본값 목록에 있어야 합니다. 런타임에 새 명령을 만들고 QAT(빠른 실행 도구 모음)에 추가할 수 없습니다.

참고

리본 애플리케이션은 QAT(빠른 실행 도구 모음) IUICollection 을 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 메서드 호출을 통해 컨트롤과 연결된 명령을 무효화하여 리본 UI에서 업데이트됩니다. 무효화 이벤트는 IUICommandHandler::UpdateProperty 콜백 메서드에 의해 처리되고 속성 업데이트가 정의됩니다.

IUICommandHandler::UpdateProperty 콜백 메서드는 실행되지 않으며 애플리케이션은 프레임워크에서 속성이 필요할 때까지 업데이트된 속성 값을 쿼리합니다. 예를 들어 탭이 활성화되고 리본 UI에 컨트롤이 표시되는 경우 또는 도구 설명이 표시되는 경우입니다.

참고

경우에 따라 IUIFramework::GetUICommandProperty 메서드를 통해 속성을 검색하고 IUIFramework::SetUICommandProperty 메서드를 사용하여 설정할 수 있습니다.

다음 표에서는 QAT(빠른 실행 도구 모음) 컨트롤과 연결된 속성 키를 나열합니다.

속성 키 참고
UI_PKEY_ItemsSource IUIFramework::GetUICommandProperty를 지원합니다(IUIFramework::SetUICommandProperty를 지원하지 않음). IUIFramework::GetUICommandProperty는 QAT의 명령을 나타내는 IUICollection 개체에 대한 포인터를 반환합니다. 각 명령은 IUISimplePropertySet::GetValue 메서드를 호출하고 속성 키 UI_PKEY_CommandId 전달하여 가져온 명령 ID로 식별됩니다.

QAT(빠른 실행 도구 모음) 드롭다운 메뉴의 기타 명령 명령 항목과 연결된 속성 키가 없습니다.