(thingvd开发日志)ppt自动播放时,想知道当前运行的进度,最常见的是用slide现在的位置。若不想用timer定时去得到sliderIndex,则用callback方式是比较不错的选择。示例代码:
class ImPlayerPPT;
typedef void (ImPlayerPPT::*MemberFunction)(int);//Callback函数原型
class PPTEventSink : public EApplication
{
public:
ImPlayerPPT* m_obj;
MemberFunction m_func;
.....................
STDMETHODIMP SlideShowNextSlide( /*SlideShowWindow**/ IUnknown* Wn);
STDMETHODIMP SlideCurrentCallback( ImPlayerPPT *, void (ImPlayerPPT::*func)(int));
.....................
}
STDMETHODIMP PPTEventSink::SlideCurrentCallback( ImPlayerPPT *obj, void (ImPlayerPPT::*func)(int))
{
m_obj = obj;
m_func= func;
return S_OK;
}
STDMETHODIMP PPTEventSink::SlideShowNextSlide( /*SlideShowWindow**/ IUnknown* Wn)
{
_SlidePtr slide = m_view->GetSlide(); // m_view is global, assigned in SlideShowBegin()
m_currslide = slide->GetSlideNumber(); // So we can hold position if needed
((m_obj)->*(m_func))(m_currslide);
//((funmap[msg]->obj)->*(funmap[msg]->fun))(para1,para2);
return S_OK;
}
调用:
int ImPlayerPPT::init()
{
...............................
m_sink = new PPTEventSink;
m_sink->SlideCurrentCallback(this, &ImPlayerPPT::setProcess);
...............................
}
参考图: