VC中的PPT编程

如何判断当前有没有PPT程序的运行状态?这个方法应该有点用

int CBeta2Dlg::GetPPTState()

{

   if (app.GetWindowState()<0)

     return -1;//程序没有Attach到一个IDispath上

 if (app.GetVisible()!=-1)

 {

  app.DetachDispatch();

  return -2;//程序已经退出

 }

 presentations=app.GetPresentations();

 if (presentations.GetCount()<=0)

  return -3;//PPT打开但没有显示

 SlideShowWindows slideShowWindows=app.GetSlideShowWindows();//所有正在播放的页面

 if (slideShowWindows.GetCount()<=0)

  return -4;//PPT打开显示但没有播放

 presentation=app.GetActivePresentation();//找到当前显示页

 slideShowWindow = presentation.GetSlideShowWindow();//当前显示的页面

 

 view = slideShowWindow.GetView();

 slides=presentation.GetSlides();

 if (view.GetCurrentShowPosition()>slides.GetCount())

  return -5;//播放到最后一页

 

 return 1;//PPT已经打开且正在播放

}

把正在播放的当前页面导出成图片保存:

BOOL CBeta2Dlg::ExportImage(int page)

{

 presentation = app.GetActivePresentation();

 slideShowWindow = presentation.GetSlideShowWindow();

 view = slideShowWindow.GetView();

 _Slide s;

 s=view.GetSlide();

//如果调用Presentation::Export方法则把当前播放的所有图片导出

 CString strFileName;

 CString ts;

 s.Export(strFileName,"jpg",m_picwidth,m_picheight);

 return TRUE;

}

 

在窗口中打开一个JPEG或者GIF的图片:

void CPreViewDlg :: LoadImg(CString imgPath)

{

    IStream*pStm ;

    CFileStatus fstatus ;

    CFile file ;

    LONG cb ;

    IPicture*pPic ;

    extern CRect m_imgRect;//图像要显示的区域

    //打开文件并检测文件的有效性 

     CDC*pDC=this->GetDC();

    if(file.Open(imgPath,CFile :: modeRead)

    &&file.GetStatus(imgPath,fstatus)

    &&((cb=fstatus.m_size)!=-1))

    {

        HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);

        LPVOID pvData=NULL ;

        if(hGlobal!=NULL)

        {

            pvData=GlobalLock(hGlobal);

            if(pvData!=NULL)

            {

                file.ReadHuge(pvData,cb);

                GlobalUnlock(hGlobal);

                CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);

            }

        }

    }

    else

    {

        :: AfxMessageBox("Load Failed");

        return ;

    }

    //打开文件结束     

    //显示JPEG和GIF格式的图片,GIF只能显示一帧。

    //从文件流中载入图片

    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))

    {

        OLE_XSIZE_HIMETRIC hmWidth ;

        OLE_YSIZE_HIMETRIC hmHeight ;

        pPic->get_Width(&hmWidth);

        pPic->get_Height(&hmHeight);

    

        if(FAILED(pPic->Render(*pDC,

        m_imgRect.left,

        m_imgRect.top,

        m_imgRect.Width(),

        m_imgRect.Height(),

        0,hmHeight,hmWidth,-hmHeight,&m_imgRect)))

        {

            pPic->Release();

            return ;

        }

        pPic->Release();

    }

    else

    {

        return ;

    }

    file.Close();

    pStm->Release();

    this->ReleaseDC(pDC);

    return ;

}

你可能感兴趣的:(编程,File,null)