Conservación del estado de la cinta
El marco de Windows Ribon (Cinta) proporciona la capacidad de conservar el estado de una variedad de configuraciones y preferencias de usuario en las sesiones de la aplicación.
- Introducción
- Una experiencia predecible
- Guardar configuración de la cinta de opciones
- Configuración de la cinta de opciones de carga
- Temas relacionados
Introducción
Varios aspectos de una cinta de opciones, incluidas las preferencias de configuración e interacción, pueden personalizarse por un usuario en tiempo de ejecución para mejorar la facilidad de uso y la productividad. El marco de la cinta de opciones proporciona la funcionalidad para conservar estas configuraciones en las sesiones de la aplicación a través de dos métodos definidos en la implementación de la interfaz IUIRibbon : IUIRibbon::LoadSettingsFromStream e IUIRibbon::SaveSettingsToStream.
Una experiencia predecible
Las directrices de experiencia del usuario de la cinta de opciones aconsejan que, para proporcionar la experiencia de usuario más predecible posible, las aplicaciones de cinta de opciones deben conservar el estado de la cinta (aparte de la última pestaña seleccionada) a medida que se cierra la aplicación. De este modo, cuando se inicia la misma aplicación, se pueden restaurar la configuración y las personalizaciones de la sesión anterior y el usuario puede esperar seguir interactuando con la aplicación de la misma manera que la dejó.
La configuración de la cinta de opciones que se puede modificar en tiempo de ejecución y conservarse en las sesiones de la aplicación se muestra en el menú contextual Comando. Incluyen:
Comandos agregados a la lista de comandos de la barra de herramientas de acceso rápido por parte del usuario. Especificado por un objeto IUICollection a través de la clave de propiedad UI_PKEY_ItemsSource .
En la captura de pantalla siguiente se muestra el menú contextual Agregar a la barra de herramientas de acceso rápido Comando.
Estado de acoplamiento de la barra de herramientas de acceso rápido preferido. Especificado por el valor UI_CONTROLDOCK de la clave de propiedad UI_PKEY_QuickAccessToolbarDock .
Esta captura de pantalla muestra la barra de herramientas de acceso rápido en su ubicación predeterminada de la barra de título de la aplicación y la barra de herramientas Mostrar acceso rápido debajo del menú contextual de la cinta de opciones Comando.
Esta captura de pantalla muestra la barra de herramientas de acceso rápido debajo de la cinta de opciones.
El estado minimizado de la cinta de opciones según lo especificado por el valor booleano de la clave de propiedad UI_PKEY_Minimized .
Nota:
El estado minimizado de la cinta de opciones no equivale al estado contraído de la cinta de opciones. Cuando está en estado contraído, la cinta de opciones está completamente oculta y no se puede interactuar con ella. El marco invoca este estado automáticamente si la ventana de la aplicación se reduce en tamaño, ya sea horizontal o verticalmente, hasta el punto en que la cinta oculta el área de trabajo de la aplicación. El marco restaura la cinta de opciones cuando se aumenta el tamaño de la ventana de la aplicación.
En esta captura de pantalla se muestra el menú contextual Minimizar el comando de la cinta de opciones.
Esta captura de pantalla muestra una cinta minimizada.
Guardar configuración de la cinta de opciones
El método IUIRibbon::SaveSettingsToStream escribe una representación binaria del estado de la cinta persistente (descrito en la sección anterior) en un objeto IStream . A continuación, la aplicación guarda el contenido del objeto IStream en un archivo o en el registro de Windows.
En el ejemplo siguiente se muestra el código básico necesario para escribir el estado de la cinta en un objeto IStream mediante el método IUIRibbon::SaveSettingsToStream .
// 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;
}
Configuración de la cinta de opciones de carga
El método IUIRibbon::LoadSettingsFromStream se usa para recuperar la información de estado de la cinta persistente almacenada como un objeto IStream por el método IUIRibbon::SaveSettingsToStream . La información del objeto IStream se aplica a la interfaz de usuario de la cinta cuando se inicializa la aplicación.
En el ejemplo siguiente se muestra el código básico necesario para cargar el estado de la cinta de opciones desde un objeto IStream con el método IUIRibbon::LoadSettingsFromStream .
// 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;
}
Para obtener un rendimiento óptimo, se debe llamar al método IUIRibbon::LoadSettingsFromStream desde la función de devolución de llamada IUIApplication::OnViewChanged durante la fase de inicialización del marco, como se muestra en el ejemplo siguiente.
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);
...
}
Varias instancias de la misma aplicación de marco de cinta de opciones pueden administrar cada estado de la cinta de opciones de forma independiente como objetos IStream independientes o como un grupo a través de un único objeto IStream.
Al sincronizar el estado de la cinta de opciones en un grupo de instancias de aplicación, cada ventana de nivel superior debe escuchar una notificación de WM_ACTIVATE . La ventana de nivel superior que se desactiva guarda su estado de cinta mediante el método IUIRibbon::SaveSettingsToStream y la ventana de nivel superior que se activa carga su estado de cinta mediante el método IUIRibbon::LoadSettingsFromStream .
Temas relacionados