首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC6.0 自製多媒體播放器:ActiveMovie Control 實戰

     編輯:VC 教學

技術選型

VC6.0 內建 ActiveX 控件 ActiveMovie Control (ActiveMovieControl Object),封裝 DirectShow 圖形串流架構,支援 MP3、WMA、WAV、AVI、MPEG、DAT 等主流格式,適合快速構建播放器原型。

專案建立步驟

  1. MFC AppWizard (exe) → Dialog based,專案名 MediaPlayer。
  2. 對話框資源:移除「確定」,保留「取消」改為「Exit」;加入 9 個按鈕 (Open/Play/Pause/Stop/Close/<</>>/Full/Repeat) + 2 個靜態文字 (Volume/Status)。
  3. 專案 → 加入專案 → Components and Controls → Registered ActiveX Controls → ActiveMovieControl Object → Insert。
    ClassWizard 為控件添加變數 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);
}

ActiveMovie Control 常用方法/屬性速查

方法/屬性說明
FileName設定/取得媒體檔案路徑
Run / Pause / Stop播放控制
CurrentPosition目前播放位置 (秒,double)
Duration總長度 (秒)
Volume音量 -10000 (靜音) ~ 0 (最大)
Balance左右聲道平衡 -10000 ~ +10000
Rate播放速率 1.0=正常
FullScreenMode全螢幕模式 BOOL
ShowControls顯示內建控制列

已知限制與現代替代

  • ActiveMovie 基於 DirectShow 6.0,Win7+ 仍可用但不再更新。
  • 無法支援 H.264/HEVC 硬體解碼、MKV 容器、字幕軌切換等現代需求。
  • 建議新專案使用 Media Foundation (IMFMediaSession)、VLC (libvlc)、FFmpeg + SDL 或 WebView2 + HTML5 Video。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved