다음을 통해 공유


컨텍스트 팝업

컨텍스트 팝업은 Windows 리본 프레임워크의 ContextPopup 뷰 에 있는 주 컨트롤입니다. 프레임워크에서 리본 구현의 확장으로만 노출되는 풍부한 상황에 맞는 메뉴 시스템입니다. 프레임워크는 컨텍스트 팝업을 독립적인 컨트롤로 노출하지 않습니다.

컨텍스트 팝업의 구성 요소

컨텍스트 팝업은 ContextMenuMiniToolbar 태그 요소를 통해 각각 노출되는 상황에 맞는 메뉴 및 Mini-Toolbar 하위 컨트롤에 대한 논리적 컨테이너입니다.

  • ContextMenu는 명령 및 갤러리 메뉴를 노출합니다.
  • MiniToolbar는 다양한 명령, 갤러리 및 글꼴 컨트롤 및 콤보 상자와 같은 복잡한 컨트롤의 부동 도구 모음을 노출합니다.

각 하위 컨트롤은 컨텍스트 팝업에 한 번 이상 나타날 수 있습니다.

다음 스크린샷에서는 컨텍스트 팝업 및 해당 구성 하위 컨트롤을 보여 줍니다.

리본 상황별 UI 구성 요소를 보여 주는 설명선이 있는 스크린샷

컨텍스트 팝업은 전적으로 개념적이며 위치 지정 또는 크기 조정과 같은 UI 기능 자체를 노출하지 않습니다.

참고

컨텍스트 팝업은 일반적으로 관심 있는 개체에서 마우스를 마우스 오른쪽 단추로 클릭하거나 바로 가기 키 SHIFT+F10을 통해 표시됩니다. 그러나 컨텍스트 팝업을 표시하는 데 필요한 단계는 애플리케이션에 의해 정의됩니다.

 

컨텍스트 팝업 구현

다른 Windows 리본 프레임워크 컨트롤과 비슷한 방식으로 컨텍스트 팝업은 프레젠테이션 세부 정보를 지정하는 태그 구성 요소와 해당 기능을 제어하는 코드 구성 요소를 통해 구현됩니다.

다음 표에서는 각 컨텍스트 팝업 하위 컨트롤에서 지원하는 컨트롤을 나열합니다.

제어 Mini-Toolbar 상황에 맞는 메뉴
단추 x x
확인란 x x
콤보 상자 x
드롭다운 단추 x x
드롭다운 색 선택기 x x
드롭다운 갤러리 x x
글꼴 컨트롤 x
도움말 단추
리본 갤러리 내
Spinner
분할 단추 x x
분할 단추 갤러리 x x
토글 단추 x x

 

태그

각 컨텍스트 팝업 하위 컨트롤은 태그에서 개별적으로 선언해야 합니다.

Mini-Toolbar

컨텍스트 팝업 미니 도구 모음에 컨트롤을 추가할 때 다음 두 가지 권장 사항을 고려해야 합니다.

  • 컨트롤은 인식할 수 있고 명백한 기능을 제공해야 합니다. 레이블 및 도구 설명이 Mini-Toolbar 컨트롤에 노출되지 않으므로 친숙함이 핵심입니다.
  • 컨트롤에 의해 노출되는 각 명령은 리본 UI의 다른 곳에 표시되어야 합니다. Mini-Toolbar 키보드 탐색을 지원하지 않습니다.

다음 예제에서는 세 개의 Button 컨트롤을 포함하는 MiniToolbar 요소의 기본 태그를 보여 줍니다.

참고

Mini-Toolbar의 각 컨트롤 행에 대해 하나의 MenuGroup 요소가 지정됩니다.

 

<MiniToolbar Name="MiniToolbar">
  <MenuGroup>
    <Button CommandName="cmdButton1" />
    <Button CommandName="cmdButton2" />
    <Button CommandName="cmdButton3" />
  </MenuGroup>
</MiniToolbar>

상황에 맞는 메뉴

다음 예제에서는 세 개의 Button 컨트롤을 포함하는 ContextMenu 요소에 대한 기본 태그를 보여 줍니다.

참고

MenuGroup 요소의 각 컨트롤 집합은 상황에 맞는 메뉴의 가로 막대로 구분됩니다.

 

<ContextMenu Name="ContextMenu">
  <MenuGroup>
    <Button CommandName="cmdCut" />
    <Button CommandName="cmdCopy" />
    <Button CommandName="cmdPaste" />
  </MenuGroup>
</ContextMenu>

컨텍스트 팝업은 각 하위 컨트롤 중 최대 하나를 포함할 수 있지만 리본 태그의 여러 ContextMenuMiniToolbar 요소 선언은 유효합니다. 이를 통해 애플리케이션은 작업 영역 컨텍스트와 같이 애플리케이션에서 정의한 조건에 따라 상황에 맞는 메뉴 및 Mini-Toolbar 컨트롤의 다양한 조합을 지원할 수 있습니다.

자세한 내용은 ContextMap 요소를 참조하세요.

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

<ContextPopup>
  <ContextPopup.MiniToolbars>
    <MiniToolbar Name="MiniToolbar">
      <MenuGroup>
        <Button CommandName="cmdButton1" />
        <Button CommandName="cmdButton2" />
        <Button CommandName="cmdButton3" />
      </MenuGroup>
    </MiniToolbar>
  </ContextPopup.MiniToolbars>
  <ContextPopup.ContextMenus>
    <ContextMenu Name="ContextMenu">
      <MenuGroup>
        <Button CommandName="cmdCut" />
        <Button CommandName="cmdCopy" />
        <Button CommandName="cmdPaste" />
      </MenuGroup>
    </ContextMenu>
  </ContextPopup.ContextMenus>
  <ContextPopup.ContextMaps>
    <ContextMap CommandName="cmdContextMap" ContextMenu="ContextMenu" MiniToolbar="MiniToolbar"/>
  </ContextPopup.ContextMaps>
</ContextPopup>

코드

컨텍스트 팝업을 호출하기 위해 리본 애플리케이션의 최상위 창에서 WM_CONTEXTMENU 알림을 받으면 IUIContextualUI::ShowAtLocation 메서드가 호출됩니다.

이 예제에서는 리본 애플리케이션의 WndProc() 메서드에서 WM_CONTEXTMENU 알림을 처리하는 방법을 보여 줍니다.

case WM_CONTEXTMENU:
  POINT pt;
  POINTSTOPOINT(pt, lParam);

  // ShowContextualUI method defined by the application.
  ShowContextualUI (pt, hWnd);
  break;

다음 예제에서는 리본 애플리케이션이 IUIContextualUI::ShowAtLocation 메서드를 사용하여 특정 화면 위치에 컨텍스트 팝업을 표시하는 방법을 보여 줍니다.

GetCurrentContext()의 값은 앞의 cmdContextMap 태그 예제에 정의된 대로 입니다.

g_pApplication IUIFramework 인터페이스에 대한 참조입니다.

HRESULT ShowContextualUI(POINT& ptLocation, HWND hWnd)
{
  GetDisplayLocation(ptLocation, hWnd);

  HRESULT hr = E_FAIL;

  IUIContextualUI* pContextualUI = NULL;
 
  if (SUCCEEDED(g_pFramework->GetView(
                                g_pApplication->GetCurrentContext(), 
                                IID_PPV_ARGS(&pContextualUI))))
  {
    hr = pContextualUI->ShowAtLocation(ptLocation.x, ptLocation.y);
    pContextualUI->Release();
  }

  return hr;
}

이전 예제와 같이 컨텍스트 팝업이 해제되기 전에 IUIContextualUI에 대한 참조를 해제할 수 있습니다. 그러나 메모리 누수를 방지하려면 특정 시점에 참조를 해제해야 합니다.

주의

Mini-Toolbar 마우스 포인터의 근접성을 기반으로 하는 기본 제공 페이드 효과가 있습니다. 이러한 이유로 Mini-Toolbar 마우스 포인터에 최대한 가깝게 표시하는 것이 좋습니다. 그렇지 않으면 충돌하는 표시 메커니즘으로 인해 Mini-Toolbar 예상대로 렌더링되지 않을 수 있습니다.

 

컨텍스트 팝업 속성

컨텍스트 팝업 컨트롤과 연결된 속성 키가 없습니다.

Windows 리본 프레임워크 컨트롤 라이브러리

ContextPopup 샘플