如何判断当前有没有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 ;
}