다음을 통해 공유


리본 상태 유지

Windows Ribon 프레임워크(리본)는 애플리케이션 세션에서 다양한 사용자 설정 및 기본 설정의 상태를 유지하는 기능을 제공합니다.

소개

구성 및 상호 작용 기본 설정을 비롯한 리본 메뉴의 다양한 측면을 런타임에 사용자가 사용자 지정하여 유용성과 생산성을 향상시킬 수 있습니다. 리본 프레임워크는 IUIRibbon 인터페이스 구현에 정의된 두 가지 방법인 IUIRibbon::LoadSettingsFromStream 및 IUIRibbon::SaveSettingsToStream을 통해 애플리케이션 세션 전체에서 이러한 설정을 유지하는 기능을 제공합니다.

예측 가능한 환경

리본 사용자 환경 지침은 가능한 가장 예측 가능한 사용자 환경을 제공하기 위해 리본 애플리케이션은 애플리케이션이 닫혀 있으므로 리본 메뉴의 상태를 유지해야 합니다(마지막으로 선택한 탭 제외). 이러한 방식으로 동일한 애플리케이션이 시작되면 이전 세션의 설정 및 사용자 지정을 복원할 수 있으며 사용자는 애플리케이션을 떠난 것과 동일한 방식으로 계속 상호 작용할 것으로 예상할 수 있습니다.

런타임에 수정하고 애플리케이션 세션에서 보존할 수 있는 리본 설정은 명령 상황에 맞는 메뉴에 나열됩니다. 해당 기능은 아래와 같습니다.

  • 사용자가 빠른 실행 도구 모음 명령 목록에 추가한 명령입니다. UI_PKEY_ItemsSource 속성 키를 통해 IUICollection 개체에 의해 지정됩니다.

    다음 스크린샷은 빠른 실행 도구 모음에 추가 상황에 맞는 메뉴 명령을 보여줍니다.

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

  • 기본 설정 빠른 실행 도구 모음 도킹 상태입니다. UI_PKEY_QuickAccessToolbarDock 속성 키의 UI_CONTROLDOCK 값으로 지정됩니다.

    이 스크린샷은 기본 애플리케이션 제목 표시줄 위치의 빠른 실행 도구 모음 과 리본 메뉴 명령 아래의 빠른 실행 도구 모음 표시를 보여 줍니다.

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

    이 스크린샷은 리본 아래의 빠른 실행 도구 모음 을 보여줍니다.

    리본 아래에 도킹된 빠른 실행 도구 모음의 스크린샷

  • 리본 메뉴는 UI_PKEY_Minimized 속성 키의 부울 값으로 지정된 대로 상태를 최소화합니다.

    참고

    리본 최소화 상태는 리본 축소 상태와 동일하지 않습니다. 축소된 상태이면 리본 메뉴가 완전히 숨겨지고 상호 작용할 수 없습니다. 프레임워크는 리본이 애플리케이션 작업 영역을 가리는 지점까지 애플리케이션 창의 크기를 가로 또는 세로로 줄이면 이 상태를 자동으로 호출합니다. 프레임워크는 애플리케이션 창의 크기를 늘리면 리본을 복원합니다.

     

    이 스크린샷은 리본 메뉴 최소화 상황에 맞는 메뉴 명령을 보여 줍니다.

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

    이 스크린샷은 최소화된 리본을 보여줍니다.

    최소화된 Microsoft 그림판 리본의 스크린샷

리본 설정 저장

IUIRibbon::SaveSettingsToStream 메서드는 IStream 개체에 영구 리본 상태(이전 섹션에 설명된)의 이진 표현을 씁니다. 그런 다음, 애플리케이션은 IStream 개체의 콘텐츠를 파일 또는 Windows 레지스트리에 저장합니다.

다음 예제에서는 IUIRibbon::SaveSettingsToStream 메서드를 사용하여 IStream 개체에 리본 상태를 쓰는 데 필요한 기본 코드를 보여 줍니다.

// 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 메서드는 IUIRibbon::SaveSettingsToStream 메서드에 의해 IStream 개체로 저장된 영구 리본 상태 정보를 검색하는 데 사용됩니다. IStream 개체의 정보는 애플리케이션이 초기화될 때 리본 UI에 적용됩니다.

다음 예제에서는 IUIRibbon::LoadSettingsFromStream 메서드를 사용하여 IStream 개체에서 리본 상태를 로드하는 데 필요한 기본 코드를 보여 줍니다.

// 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;
}

최적의 성능을 위해 다음 예제와 같이 프레임워크 초기화 단계 동안 IUIApplication::OnViewChanged 콜백 함수에서 IUIRibbon::LoadSettingsFromStream 메서드를 호출해야 합니다.

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 메서드를 사용하여 리본 상태를 로드합니다.

빠른 실행 도구 모음