VS下 MFC通过COM操作PPT

本文介绍了如何在VS2013环境下使用MFC通过COM接口操作PPT,包括启动PPT、跳转页、关闭及获取页码等。通过创建MFC DLL并选择相应类库,如_Application、_Presentation等,实现对PPT的控制,并提供了相关方法的详细说明,如SlideShowView的GotoSlide和SlideShowWindow的属性设置。
摘要由CSDN通过智能技术生成

需要整合一些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
MFC 显示PPT //启动 PowerPoint: void CMainFrame::OnPowerpointStartpowerpoint() { /// Check if the IDispatch connection exists with PowerPoint, // if not create one. if (m_ppt.m_lpDispatch == NULL) { // Create IDispatch connection to PowerPoint. m_ppt.CreateDispatch("PowerPoint.Application"); }; // Bring the PowerPoint application to the front. m_ppt.Activate(); } void CMainFrame::OnPowerpointStartslideshow() { _Presentation oPresentation; SlideShowSettings oShow; // Attach to the Active Presentation. oPresentation.AttachDispatch(m_ppt.GetActivePresentation()); // Attach to the slide-show settings. oShow.AttachDispatch(oPresentation.GetSlideShowSettings()); // Run the slide show. oShow.Run(); } // 创建幻灯片: void CMainFrame::OnPowerpointCreateslide() { // Connect to the active presentation. There is no error trapping. // If the active presentation the framework traps // the error and displays a message box. _Presentation ActivePresentation(m_ppt.GetActivePresentation()); // Connect to the slides collection. Slides oSlides(ActivePresentation.GetSlides()); // This constant is defined in the PowerPoint Object model. // You can use the Object Browser, with Visual Basic Editor // (VBE), to look up the different constant values. const ppLayoutTitleOnly = 11; // Add a new slide to the presentation. This code adds the new // slide to the end of the presentation. oSlides.Add(oSlides.GetCount() + 1l, ppLayoutTitleOnly); } // 创建演示文稿: void CMainFrame::OnPowerpointCreatepresentation() { Presentations PresCollection; // Make sure there is a dispatch pointer for PowerPoint. if(m_ppt.m_lpDispatch == NULL) { // Display a message indicating that PowerPoint is not running. MessageBox("PowerPoint is not running.", "Start PowerPoint"); } else { // Bring PowerPoint to the front. m_ppt.Activate(); // Attach the presentations collection to the PresCollection // variable. PresCollection.AttachDispatch(m_ppt.GetPresentations()); // Create a new presentation. PresCollection.Add(1);
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值