본문 바로가기
C & C++/C & C++

MS Office 파워 포인트 자동화(PPT Automation)

by izen8 2013. 11. 15.
반응형




PowerPoint에 대한 MFC 자동화 클라이언트를 만드는 방법 (영문한글)
How to create an automation project using MFC and a type library
Office 자동화 사용하여 Visual C++
MFC PowerPoint Automation <MFC 파워포인트 제어하기>
How to automate Excel from C++ without using MFC or #import
HOWTO: Use OLE Automation from a C Application Rather Than C++
Locating Resources to Study Automation
COMEXCEL 샘플: 컴파일러 COM 지원이 포함된 자동화 클라이언트 응용 프로그램
http://support.microsoft.com/kb/q184663/
Automating MS-Office applications
http://www.codeproject.com/KB/graphics/PowerpointBitmaps.aspx
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=746771&ref=746771
http://openxmldeveloper.org/forums/thread/1794.aspx
How to obtain built-in constant values for an Office application
How to use a type library for Office Automation from Visual C++ .NET
Visual C++ .NET 2002/2003 및 MFC를 사용하여 PowerPoint 2000, 2003 이벤트를 처리하는 방법
자동화하는 방법을 사용하여 C++ Office ActiveX 문서 포함
MFC 만들고 PowerPoint 프레젠테이션을 표시하는 방법



MFC 프로젝트로 시작


3) 설정값은 다음과 같이



4) ClassWizard에서 Add Class에 From a type library 로 클릭



5) C:\Program Files\Microsoft Office\Office12 에 있는 msppt.olb 선택 (office 2007 기준입니다)


참고)




6) 프로젝트에 msppt.h, msppt.cpp 화일이 생긴다.




7) PPT 제어할 명령어를 추가한뒤.. 관련 함수를 추가한다.




8) 관련코드 작성

in MainFrm.h

    // add for PPT
    _Application        m_ppt;    
    SlideShowWindow        m_ppt_slideshowwindow;
    SlideShowView        m_ppt_slideshowview;

    bool                m_bPPTSlide;
    int                    m_nTotalSlides;

// Generated message map functions
protected:
    //{{AFX_MSG(CMainFrame)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnStartPPT();
    afx_msg void OnStartShow();
    afx_msg void OnNextSlide();
    afx_msg void OnEndShow();
    afx_msg void OnQuitPPT();


in MainFrm.cpp

CMainFrame::CMainFrame()
{
    // TODO: add member initialization code here
    m_ppt.CreateDispatch("PowerPoint.Application");

    m_ppt_slideshowview        = NULL;
    m_ppt_slideshowwindow    = NULL;
    m_nTotalSlides            = 0;
}

void CMainFrame::OnStartPPT() 
{
    if (m_ppt.m_lpDispatch == NULL)
    {
        m_ppt.CreateDispatch("PowerPoint.Application");
    }

    m_ppt.Activate();    
}

void CMainFrame::OnStartShow() 
{
    if (!m_ppt.GetVisible()) return;

    _Presentation        kPresentation;    
    kPresentation.AttachDispatch(m_ppt.GetActivePresentation());

    SlideShowSettings    kSlideShowSettings;
    kSlideShowSettings.AttachDispatch(kPresentation.GetSlideShowSettings());

    Slides kSlides    = kPresentation.GetSlides();
    m_nTotalSlides    = kSlides.GetCount();

    kSlideShowSettings.Run();

    m_ppt_slideshowwindow    = kPresentation.GetSlideShowWindow();
    m_ppt_slideshowview        = m_ppt_slideshowwindow.GetView();

    m_ppt_slideshowwindow.Activate();    
}

void CMainFrame::OnNextSlide() 
{
    if (m_ppt_slideshowview == NULL) return;

    if (m_ppt_slideshowview.GetCurrentShowPosition() > m_nTotalSlides)
    {
        m_ppt_slideshowview.Exit();
        m_ppt_slideshowview = 0;
        return;
    }

    m_ppt_slideshowview.Next();
    m_ppt_slideshowwindow.Activate();    
}

void CMainFrame::OnEndShow() 
{
    if (m_ppt_slideshowview)
    {
        m_ppt_slideshowview.Exit();
        m_ppt_slideshowview = 0;
    }
    
    m_ppt_slideshowwindow = 0;
}

void CMainFrame::OnQuitPPT() 
{
    m_nTotalSlides            = 0;
    m_ppt_slideshowview        = 0;
    m_ppt_slideshowwindow    = 0;

    if (m_ppt.m_lpDispatch != NULL) 
    {        
        m_ppt.Quit();
        m_ppt.ReleaseDispatch();    
    }
}


샘플 파일

PPTViewer_Sample.zip



반응형

댓글