需要整合一些PPT、Word、PDF进软件,由于PPT有切换动画、音效等难以转化的功能,所以需要将它整体嵌入进来。所以只能用微软的库,以下DLL可以实现播放、跳转页、关闭、获得页码等功能。
Step 1:
在VS2013下,可以新建MFC应用程序或者MFC DLL,因为PPT组件只支持MFC。
Step 2:
我选择新建了DLL。在程序中添加类。
选择相应的类库。
你在选择的时候会发现,原来我们可以利用MFC操作这么多Windows的程序。这里我选择PowerPoint(当然你要先安装它)。在左边的接口里,选择你需要的接口,这里我选择_Application(用来启动PPT),_Presentation(用来获取PPT的实例),Slides(用来设置PPT的播放页面),SlideShowWindows/SlideShowWindow(用来设置播放窗口的大小、位置),SlideShowView(用来具体操作PPT的每个播放页面),如果你需要其他的功能就导入其他的类。导入完成后,我们在程序里,就可以看到这些类的头文件了,实例化后,就可以调用他们的方法,参考下面的代码(加了部分注释)。
Step 3:
Code。
extern "C" BOOL __declspec(dllexport) openPpt(LPCTSTR m_szFileName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
try
{
if (!m_PPTApp.CreateDispatch(_T("Powerpoint.Application"), NULL))
{
//MessageBox(_T("创建PowerPoint应用程序失败!"), AfxGetApp()->m_pszAppName, MB_ICONERROR);
return false;
}
if (!m_PPTApp.m_lpDispatch)
{
//MessageBox(_T("PPT application was not initialized."), AfxGetApp()->m_pszAppName, MB_ICONERROR);
return false;
}
m_Presentations.AttachDispatch(m_PPTApp.get_Presentations());
m_Presentation.AttachDispatch(m_Presentations.Open(m_szFileName, TRUE, -1, 0));
m_slides = m_Presentation.get_Slides();
m_slide = m_slides.Item(COleVariant((long)1));
m_slideshow = m_Presentation.get_SlideShowSettings();
m_slideshow.put_AdvanceMode(2);
m_slideshow.put_ShowType(1);
numOfPages = m_slides.get_Count();//获取总页数
m_slideshow.put_LoopUntilStopped(TRUE); //设置循环放映
m_oShowWindow = m_slideshow.Run(); //运行ppt
// HRESULT hwnd = m_oShowWindow.get_HWND();
// SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, 3);
m_slideShowView = m_oShowWindow.get_View();//得到ppt视图
m_oShowWindow.put_Left(0);//设置ppt播放窗口位置和大小
m_oShowWindow.put_Top(0);
int x = GetSystem