Office UI utilizando C++ en VS 2008 SP1

|

En mayo de este año Microsoft hizo disponible el Service Pack 1 de Visual Studio, este relanzamiento de características permite a desarrolladores hacer uso de nuevos componentes y plantillas de proyectos, entre ellos el Entity Framework que estaré cubriendo en próximas publicaciones y la nueva posibilidad de utilizar la interfaz de Office en aplicaciones propietarias.

Hasta el momento solo se cuenta con la posibilidad de utilizar la interfaz de Office en proyectos MFC en C++, las ventajas comprendidas en este nuevo tipo de aplicaciones incluyen la posibilidad de crear aplicaciones con Ribbons, controles de Microsoft Outlook, notificaciones, entre una larga lista de controles disponibles dentro de la suite de Office, con una arquitectura muy similar a aquella empleada en aplicaciones como Word y Powerpoint.

A continuación un par de pasos para ver su funcionamiento en VS 2008 SP1.

1. Creando el proyecto MFC

Una vez que seleccionamos C++ como el lenguaje a emplear creamos una aplicacion MFC, aquellos que han trabajado aplicaciones multidocumentos encontraran este paso muy familiar dado a que sigue siendo el estilo usual de trabajar para aplicaciones Windows de modo nativo.

OFFICE1

2. Seleccionando el tipo de aplicación.

En la ventana siguiente del Wizzard encontraremos Office disponible en la sección Project Style.

OFFICE2

3. Creando el proyecto.

Una vez creado el proyecto tendremos una solución con varios archivos como se ve en la siguiente figura.

OFFICE3

4. Compilando y ejecutando.

El output del proyecto sin modificar una linea de la plantilla genera una aplicacion como la que se muestra a continuación.

OFFICE4

5. Agregando botones al ribbon.

El siguiente segmento de codigo en MainFrm.cpp en el metodo InitializeRibbon() agrega un panel al ribbon de la aplicación.

// Add "Home" category with "Clipboard" panel:

bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);

ASSERT(bNameValid);

CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);

// Creando un panel customizado.

CMFCRibbonPanel* myPanel = pCategoryHome->AddPanel(L"My Panel");

// Creando un boton.

CMFCRibbonButton* myButton = new CMFCRibbonButton(1003, L"Mi boton de prueba", 1, TRUE);

// Agregar un boton.

myPanel->Add(myButton);

image

6. Empleando eventos de interfaz de usuario

Dado a que Office UI está basado en MFC el manejo de eventos sigue su modo tradicional mediante las macros ON_COMMAND y ON_UPDATE_COMMAND_UI. El siguiente fragmento de código muestra como utilizar un método para manejar los mensajes provenientes de los botones del ribbon.

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
ON_WM_CREATE()
ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
END_MESSAGE_MAP()