Menú emergente De contexto

Un elemento emergente de contexto es el control principal de la vista ContextPopup del marco de la cinta de Windows. Se trata de un sistema de menú contextual enriquecido que solo expone el marco como una extensión a una implementación de la cinta de opciones; el marco no expone el elemento emergente de contexto como un control independiente.

Componentes del elemento emergente Contexto

El elemento emergente de contexto es un contenedor lógico para el menú contextual y Mini-Toolbar subcontroles que se exponen a través de los elementos de marcado ContextMenu y MiniToolbar , respectivamente:

Cada subcontrol puede aparecer como máximo una vez en un elemento emergente de contexto.

En la captura de pantalla siguiente se muestra el elemento emergente de contexto y sus subcontroles constituyentes.

captura de pantalla con llamadas que muestran los componentes contextuales de la interfaz de usuario de la cinta de opciones.

El elemento emergente de contexto es puramente conceptual y no expone ninguna funcionalidad de interfaz de usuario, como el posicionamiento o el ajuste de tamaño.

Nota:

El menú emergente de contexto se muestra normalmente haciendo clic con el botón derecho en el mouse (o a través del método abreviado de teclado MAYÚS+F10) en un objeto de interés. Sin embargo, la aplicación define los pasos necesarios para mostrar el elemento emergente de contexto.

 

Implementar el elemento emergente Contexto

De forma similar a otros controles del marco de la cinta de Opciones de Windows, el elemento emergente de contexto se implementa a través de un componente de marcado que especifica sus detalles de presentación y un componente de código que rige su funcionalidad.

En la tabla siguiente se enumeran los controles admitidos por cada subcontrol emergente de contexto.

Control Mini-Toolbar Menú contextual
Button x x
Casilla x x
Cuadro combinado x
Botón desplegable x x
Selector de colores desplegable x x
Galería desplegable x x
Control de fuentes x
Botón Ayuda
Galería en cinta de opciones
Spinner
Botón De división x x
Galería de botones de división x x
Botón de alternancia x x

 

marcado

Cada subcontrol emergente de contexto debe declararse individualmente en el marcado.

Mini-Toolbar

Al agregar controles a una mini barra de herramientas emergente de contexto, se deben tener en cuenta las dos recomendaciones siguientes:

  • Los controles deben ser altamente reconocibles y proporcionar una funcionalidad obvia. La familiaridad es clave, ya que las etiquetas y la información sobre herramientas no se exponen para los controles de Mini-Toolbar.
  • Cada comando expuesto por un control debe presentarse en otra parte de la interfaz de usuario de la cinta de opciones. El Mini-Toolbar no admite la navegación por teclado.

En el ejemplo siguiente se muestra el marcado básico de un elemento MiniToolbar que contiene tres controles Button .

Nota:

Se especifica un elemento MenuGroup para cada fila de controles de la mini barra de herramientas.

 

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

Menú contextual

En el ejemplo siguiente se muestra el marcado básico de un elemento ContextMenu que contiene tres controles Button .

Nota:

Cada conjunto de controles del elemento MenuGroup está separado por una barra horizontal en el menú contextual.

 

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

Aunque un elemento Emergente de contexto puede contener como máximo uno de cada subcontrol, son válidas varias declaraciones de elementos ContextMenu y MiniToolbar en el marcado de la cinta de opciones. Esto permite que una aplicación admita varias combinaciones de controles de menú contextual y Mini-Toolbar, en función de los criterios definidos por la aplicación, como el contexto del área de trabajo.

Para obtener más información, vea el elemento ContextMap .

En el ejemplo siguiente se muestra el marcado básico para el elemento 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>

Código

Para invocar un elemento emergente de contexto, se llama al método IUIContextualUI::ShowAtLocation cuando la ventana de nivel superior de la aplicación de cinta recibe una notificación WM_CONTEXTMENU.

En este ejemplo se muestra cómo controlar la notificación de WM_CONTEXTMENU en el método WndProc() de la aplicación Ribbon.

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

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

En el ejemplo siguiente se muestra cómo una aplicación de cinta de opciones puede mostrar el elemento emergente de contexto en una ubicación de pantalla específica mediante el método IUIContextualUI::ShowAtLocation .

GetCurrentContext() tiene un valor de como se define en el ejemplo de cmdContextMap marcado anterior.

g_pApplication es una referencia a la interfaz 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;
}

La referencia a IUIContextualUI se puede publicar antes de que se descarte el elemento emergente de contexto, como se muestra en el ejemplo anterior. Sin embargo, la referencia debe liberarse en algún momento para evitar pérdidas de memoria.

Precaución

El Mini-Toolbar tiene un efecto de atenuación integrado que se basa en la proximidad del puntero del mouse. Por este motivo, se recomienda que el Mini-Toolbar se muestre lo más cerca posible del puntero del mouse. De lo contrario, debido a los mecanismos de visualización en conflicto, es posible que el Mini-Toolbar no se represente según lo previsto.

 

Propiedades emergentes de contexto

No hay claves de propiedad asociadas al control Emergente de contexto.

Biblioteca de controles del marco de la cinta de opciones de Windows

Ejemplo contextPopup