Microsoft KB Archive/180616

= How to use MFC to create and show a PowerPoint presentation =

Article ID: 180616

Article Last Modified on 1/22/2007

-

APPLIES TO


 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition
 * Microsoft Foundation Class Library 4.2
 * Microsoft PowerPoint 2002 Standard Edition
 * Microsoft PowerPoint 2000 Standard Edition
 * Microsoft PowerPoint 97 Standard Edition

-



This article was previously published under Q180616



SUMMARY
This article shows how to automate Microsoft PowerPoint using the Microsoft Foundation Class (MFC) library version 4.2 (installed with Microsoft Visual C++ versions 5.0 and 6.0). Specifically, this article illustrates how to create and show a PowerPoint presentation with automation.



MORE INFORMATION
You can copy the code in this article to the message handler function of an event defined in an MFC .cpp file. However, the purpose of the code is to illustrate the process of using the IDispatch interfaces and member functions defined in the PowerPoint 97 type library. The primary benefit comes from reading and understanding the code in the example so that you can modify the example or write your own code to automate Microsoft PowerPoint 97 using MFC.

Notes for Automating PowerPoint 2000 and 2002
The sample code in this article uses class wrappers generated from the PowerPoint 97 object library (Msppt8.olb). With slight modification, this code can be applied to an Automation client that uses class wrappers for PowerPoint 2000 (Msppt9.olb) or PowerPoint 2002 (Msppt.olb). For additional information about using the sample code described in this article with the PowerPoint 2000 or 2002 type library, please click the article number below to view it in the Microsoft Knowledge Base:

224925 INFO: Type Libraries for Office May Change With New Release

Steps to Create the Project
 Follow steps 1 through 12 in the following Microsoft Knowledge Base article to create a sample project that uses the IDispatch interfaces and member functions defined in the Msppt8.olb type library:

178749 How To Create an Automation Project Using MFC and a Type Library

 Press CTRL+W to display the ClassWizard once more and select the Automation tab. Click the Add Class button and select From a Type Library. Locate Graph8.olb and click Open. Select only the "Chart" class and click OK. Click OK to close the ClassWizard.

NOTE: The presentation that you will create with this example contains an embedded Microsoft Graph chart; this is the reason for adding the Chart class from the Microsoft Graph type library (Graph8.olb).  At the top of the AutoProjectDlg.cpp file, add the following lines: #include "msppt8.h"     #include "graph8.h"                      Add the following code to CAutoProjectDlg::OnRun in the AutoProjectDlg.cpp file: // Commonly used OLE-variants. COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

_Application  app; Presentations presentations; _Presentation presentation; Slides        slides; _Slide        slide; ShapeRange    shaperange; Shapes        shapes; Shape         shape; TextFrame     textframe;

TextRange     textrange; Font          font; FillFormat    fillformat; ColorFormat   colorformat; ShadowFormat  shadow;

CString strPic1 ="C:\\Program Files\\Microsoft Office\\Clipart\\Popular\\Amhappy.wmf"; CString strTemplate = "C:\\Program Files\\Microsoft Office\\Templates\\Presentation Designs\\Zesty.pot";

if(!app.CreateDispatch("Powerpoint.Application")) {        AfxMessageBox("Could not create Powerpoint object."); return; }

//Make the application visible and minimized. app.SetVisible((long)TRUE); app.SetWindowState((long) 2);  //ppWindowMinimized=2

//Get the Presentations collection and create a new presentation //from a template(.POT) presentations.AttachDispatch(app.GetPresentations); presentation = presentations.Open(        strTemplate,   //File name         (long)0,       //Read-only         (long)-1,      //Untitled         (long)-1       //WithWindow         );

slides = presentation.GetSlides;

//Add the first slide to the presentation. slide = (slides.Add((long)1, (long)11));  //pptLayoutTitleOnly=11

//Modify the text and font name of the TextFrame on the slide. shapes = slide.GetShapes; shape = shapes.Item(COleVariant((short)1)); textframe = shape.GetTextFrame; textrange = textframe.GetTextRange; textrange.SetText("My Sample Presentation");//Set the text font = textrange.GetFont; font.SetName("Comic Sans MS");             //Set the font name. font.SetSize((float)48);                   //Set the font size.

//Insert a picture into the slide and position it.

shapes.AddPicture(                  strPic1,      //Filename                   (long)0,      //LinkToFile                   (long)-1,     //SaveWithDocument                   (float)150,   //Left                   (float)150,   //Top                   (float)500,   //Width                   (float)350    //Height                   );

//Add the second slide to the presentation. slide = (slides.Add((long)2, (long)11));  //pptLayoutTitleOnly=11

//Modify the text and font name of the //TextFrame on the slide. shapes = slide.GetShapes; shape = shapes.Item(COleVariant((short)1)); textframe = shape.GetTextFrame; textrange = textframe.GetTextRange; textrange.SetText("Look! It's a Graph!");//Set the text font = textrange.GetFont; font.SetName("Comic Sans MS");          //Set the font name. font.SetSize((float)48);                //Set the font size.

//Add a Graph8 object to the slide. shape = shapes.AddOLEObject(                    (float)150,      //Left                     (float)150,      //Top                     (float)480,      //Width                     (float)320,      //Height                     "MSGraph.Chart", //Classname                     "",              //FileName                     (long)0,         //DisplayAsIcon                     "",              //IconFileName                     (long)0,         //IconIndex                     "",              //IconLabel                     (long)0          //Link                     );

//Modify the charttype of the graph. Chart chart; OLEFormat olefmt = shape.GetOLEFormat; chart = olefmt.GetObject; chart.SetChartType((long)70);

//Add the third slide to the presentation. slide = (slides.Add((long)3, (long)12));  //ppLayoutBlank = 12

//Change the background color of the slide. slide.SetFollowMasterBackground((long)0); shaperange = slide.GetBackground; fillformat = shaperange.GetFill; colorformat = fillformat.GetForeColor; colorformat.SetSchemeColor((long)3);  //ppShadow = 3

//Add Text Effects to the last slide shapes = slide.GetShapes; shape = shapes.AddTextEffect(                    (long)27,    //PresetTextEffect (msoTextEffect28 = 27)                     "The End",   //Text                     "Impact",    //FontName                     (float)96,   //FontSize

(long)0,    //FontBold (long)0,    //FontItalic (float)230, //Left (float)200  //Top );

//Apply a gradient fill to the texteffect. fillformat = shape.GetFill; colorformat = fillformat.GetForeColor; colorformat.SetSchemeColor((long)2);  //ppForeground = 2 colorformat = fillformat.GetBackColor; colorformat.SetSchemeColor((long)4);  //ppTitle = 4

fillformat.TwoColorGradient ((long)1, (long)1); //msoGradientHorizontal = 1

//Apply a shadow to the texteffect. shadow = shape.GetShadow; colorformat = shadow.GetForeColor; colorformat.SetSchemeColor((long)2);  //ppForeground = 2 shadow.SetVisible((long)-1); shadow.IncrementOffsetX((float)3); shadow.IncrementOffsetY((float)3);

SlideShowTransition  show; SlideShowSettings  slideshow;

//Set the Transition effects for Slide 1. slide = slides.Item(COleVariant((short)1)); show = slide.GetSlideShowTransition; show.SetEntryEffect((long)769);     //ppEffectBlindsHorizontal=769 show.SetAdvanceOnTime((long)-1); show.SetAdvanceTime((float)3);

//Set the Transition effects for Slide 2. slide = slides.Item(COleVariant((short)2)); show = slide.GetSlideShowTransition; show.SetEntryEffect((long)770);     //ppEffectBlindsVertical=770 show.SetAdvanceOnTime((long)-1); show.SetAdvanceTime((float)3);

//Set the Transition effects for Slide 3. slide = slides.Item(COleVariant((short)3)); show = slide.GetSlideShowTransition; show.SetEntryEffect((long)3073);     //ppEffectBoxOut=3073 show.SetAdvanceOnTime((long)-1); show.SetAdvanceTime((float)3);

//Run the show. slideshow = presentation.GetSlideShowSettings; slideshow.Run;

//Quit the application after waiting 9 seconds (the length of the     //slide show). ::Sleep(9000); presentation.SetSaved((long)-1); app.Quit;   If needed, modify the assignments for strPic1 and strTemplate to valid paths for an image file and a PowerPoint presentation template: CString strPic1 ="C:\\Program Files\\Microsoft Office\\Clipart\\Popular\\Amhappy.wmf"; CString strTemplate = "C:\\Program Files\\Microsoft Office\\Templates\\Presentation Designs\\Zesty.pot"; 

Additional query words: PPT PPT97 PPT2000 PPT2002

Keywords: kbprogramming kbfunctions kbautomation kbhowto kbinterop KB180616

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.