关键代码如下
CRect rect;
m_flash.GetWindowRect(&rect);
rect.SetRect(rect.left,rect.top,rect.left+m_nWidth,rect.top+m_nHeight);
ScreenToClient(&rect);
m_flash.MoveWindow(&rect,TRUE);
SetDlgItemText(IDC_PAUSE,"暂停");
m_nCurrent=0;
if(!LoadIndex())
{
MessageBox("读取索引文件失败");
return;
}
StartMovie();
SetTimer(1,1000,NULL);
void CSwf2jpgDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
KillTimer(1);
Capture2File();
if(StartMovie())
SetTimer(1,1000,NULL);
CDialog::OnTimer(nIDEvent);
}
void CSwf2jpgDlg::Capture2File()
{
if(pFlashDC)
m_flash.ReleaseDC(pFlashDC);
pFlashDC=m_flash.GetDC();
Save2Jpg(m_strFileName,pFlashDC,m_nWidth,m_nHeight);
m_flash.ReleaseDC(pFlashDC);
}
BOOL CSwf2jpgDlg::StartMovie()
{
if(m_strList.IsEmpty())
return FALSE;
m_strFileName=m_strList.RemoveHead();
m_strFileName=m_strFileName.Left(m_strFileName.GetLength() -1);
m_flash.SetMovie(m_strFileName);
m_flash.Play();
m_flash.SetLoop(TRUE);
m_flash.SetBackgroundColor(1);
// m_flash.GotoFrame(min(m_nFrame,m_flash.GetTotalFrames()));
// m_flash.GotoFrame(min(m_nFrame,m_flash.GetTotalFrames()));
m_flash.GotoFrame(m_flash.GetTotalFrames() /2);
// m_flash.Rewind();
m_flash.Stop();
CString str;
str.Format("%d",++m_nCurrent);
SetDlgItemText(IDC_FILE,m_strFileName);
SetDlgItemText(IDC_FINISH,str);
return TRUE;
}
PS:flash控件的SetLoop(TRUE)是必须的,否刚对于有程序帧的flash控件将会造成截图失败。
程序运行中会出现有的flash文件截图失败后,其后跟着的DC获取图像将会都失败、