Cómo consultar el DISPID de eventos de oficina
Hoy estoy muy feliz y finalmente aprendí a capturar eventos de Microsoft Office PowerPoint. Escríbelo y compártelo con todos. Descubrí que hay pocos artículos originales en Internet y muchos artículos reimpresos, por lo que haré algunas contribuciones a la originalidad.
Este artículo toma PPT como ejemplo. Sus principios deben ser aplicables a WORD y EXCEL. Se supone que el lector tiene alguna base en el uso de ATL para desarrollar complementos de OFFICE (o COM). Los llamados eventos en PPT se refieren a SlideShowBegin (inicio de la reproducción), SlideShowEnd (finalización de la reproducción), etc. Los nombres y significados de todos los eventos se pueden encontrar en el capítulo de ayuda de VBA de PPT.
El entorno de prueba del autor es VC6.0 y utiliza el marco ATL. El marco de software básico para las pruebas utiliza el código fuente en "Desarrollo de complementos PowerPoint2K / XP" de Xu Jingzhou (estoy muy agradecido con este experto, el código y los artículos me han brindado mucha ayuda). Los artículos se pueden encontrar en www.vckbase. Se encuentran en .com. Aquí se omiten los detalles relacionados con el desarrollo de complementos.
De hecho, la tecnología es solo una capa de papel, muy simple. No voy a explicarla en detalle aquí, pero sí hablaré de algunos puntos clave. De hecho, después de analizar cuidadosamente el código del evento de clic en el botón personalizado, me di cuenta de la captura del evento de reproducción PPT después de una mañana de pruebas. Lo principal es agregar algo de código en algunos lugares.
1. Hacer que la clase de complemento herede IDispEventSimpleImpl público<11/*Número positivo no repetido personalizado*/, CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)>
Defina un escape :typedef IDispEventSimpleImpl*nID =*/ 11,CPowerPoint2000Addin, &__uuidof(MSPPT::EApplication)> PPTEvents;
2. , seguido de Es el valor de retorno, número y tipo de parámetros)
_ATL_FUNC_INFO OnPPTEventInfo = {CC_STDCALL,VT_EMPTY,1,{VT_DISPATCH}};
3. p>
BEGIN_SINK_MAP(CPowerPoint2000Addin)
//SINK_ENTRY_INFO(1,__uuidof(Office::_CommandBarButtonEvents),/*dispid*/ 0x01,OnClickButton1, &OnClickButtonInfo)
SINK_ENTRY_INFO( 11,__uuidof( MSPPT::EApplication),/*dispid*/ 2011,SlideShowBegin, &OnPPTEventInfo)//2011, DISPID, que se puede encontrar en MSDN
END_SINK_MAP()
Otro DISPID p>
2001 WindowSelectionChange
2002 WindowBeforeRightClick
2003 WindowBeforeDoubleClick
2004 PresentaciónCerrar
2005 PresentaciónGuardar
2006 PresentaciónAbrir
2007 NuevaPresentación
2008 PresentaciónNuevaDiapositiva
2009 VentanaActivar
2010 VentanaDesactivar
2011 SlideShowBegin
2012 SlideShowNextBuild
2013 SlideShowNextSlide
2014 SlideShowEnd
2015 PresentationPrint
2016 SlideSelectionChanged x
2017 ColorSchemeChanged x
2018 PresentationBeforeSave x
2019 SlideShowNextClick x
4. Declarar eventos
void __stdcall SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn );
Implementar eventos
void __stdc
todo CPowerPoint2000Addin::SlideShowBegin (IDispatch * /*struct SlideShowWindow * */ Wn )
{
MessageBox(NULL, "SlideShowBegin", "SlideShowBegin" , MB_OK);
// return S_OK;
}
5. Activar el nuevo punto de conexión del evento
hr = PPTEvents::DispEventAdvise((IDispatch* ) m_spApp);
if(FAILED(hr)){
//MessageBox(NULL, "FAILED", "FIELED", MB_OK);
}
Eso es todo. Puedes hacer clic en el botón de reproducción de PPT para ver el efecto y si aparece tu propio cuadro de diálogo. Consejo: no olvide desconectar el evento del punto de conexión recién agregado cuando se desinstale el complemento. Al depurar, no olvide cambiar la biblioteca de OFFICE a la ruta y versión correspondientes de la biblioteca en su propia máquina.
Descargue todos los códigos fuente de mi disco duro de red ( ). Para obtener más información, visite mi blog (/wallimn)
.