VC6.0 內建 ActiveX 控件 ActiveMovie Control (ActiveMovieControl Object),封裝 DirectShow 圖形串流架構,支援 MP3、WMA、WAV、AVI、MPEG、DAT 等主流格式,適合快速構建播放器原型。
MediaPlayer。CActiveMovie3 m_ActiveMovie。// 開啟檔案
void CMediaPlayerDlg::OnOpen()
{
CString filter = _T("MP3 (*.mp3)|*.mp3|WMA (*.wma)|*.wma|AVI (*.avi)|*.avi|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter);
if (dlg.DoModal() == IDOK) {
CString path = dlg.GetPathName();
path.MakeUpper();
m_ActiveMovie.SetFileName(path); // 自動載入
}
}
// 播放/暫停/停止
void CMediaPlayerDlg::OnPlay() { m_ActiveMovie.Run(); SetTimer(0, 20, NULL); }
void CMediaPlayerDlg::OnPause() { m_ActiveMovie.Pause(); }
void CMediaPlayerDlg::OnStop() { m_ActiveMovie.Stop(); KillTimer(0); }
// 音量控制 (範圍 -10000~0)
void CMediaPlayerDlg::OnUpper() // 音量+
{
long vol = m_ActiveMovie.GetVolume();
m_ActiveMovie.SetVolume(min(vol + 500, 0));
}
void CMediaPlayerDlg::OnLower() // 音量-
{
long vol = m_ActiveMovie.GetVolume();
m_ActiveMovie.SetVolume(max(vol - 500, -10000));
}
// 全螢幕
void CMediaPlayerDlg::OnFullscreen()
{
m_ActiveMovie.Pause();
m_ActiveMovie.SetFullScreenMode(TRUE);
m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);
m_ActiveMovie.Run();
}
// 重複播放邏輯
void CMediaPlayerDlg::OnRepeat()
{
m_bRepeat = !m_bRepeat;
SetDlgItemText(IDC_STATIC_STATUS, m_bRepeat ? _T("Status:Repeat") : _T("Status:Normal"));
}
// 定時器檢查播放結束
void CMediaPlayerDlg::OnTimer(UINT nIDEvent)
{
if (m_bRepeat && m_ActiveMovie.GetCurrentPosition() == 0)
m_ActiveMovie.Run(); // 重頭播放
CDialog::OnTimer(nIDEvent);
}
| 方法/屬性 | 說明 |
|---|---|
FileName | 設定/取得媒體檔案路徑 |
Run / Pause / Stop | 播放控制 |
CurrentPosition | 目前播放位置 (秒,double) |
Duration | 總長度 (秒) |
Volume | 音量 -10000 (靜音) ~ 0 (最大) |
Balance | 左右聲道平衡 -10000 ~ +10000 |
Rate | 播放速率 1.0=正常 |
FullScreenMode | 全螢幕模式 BOOL |
ShowControls | 顯示內建控制列 |