RealPlayer 作為早期網路串流媒體的代表性播放器,其 ActiveX 控件(RealPlayer G2 Control)提供豐富的播放控制介面,適合快速開發支援 RM、MP3、AVI、MPEG 等多種格式的播放器應用。本文以對話框基礎專案為例,逐步示範控件插入、介面佈局、事件映射與核心播放邏輯實作。
SunApplePlayer。RealPlayer G2 Control(或 RealPlayer ActiveX Control)並加入。CRealPlayerCtrl),並在對話框標頭檔宣告成員變數 m_player。| 控件類型 | ID | 用途 |
|---|---|---|
| Button | IDC_OPEN | 開啟檔案對話框 |
| Button | IDC_PLAY | 播放 |
| Button | IDC_PAUSE | 暫停 |
| Button | IDC_STOP | 停止 |
| Static | IDC_STATUS | 顯示檔案名、播放狀態 |
| Slider | IDC_VOLUME | 音量控制 |
| Slider | IDC_PROGRESS | 播放進度 |
void CSunApplePlayerDlg::OnOpen()
{
static TCHAR szFilter[] = _T(
"RealMedia (*.rm)|*.rm|"
"MP3 (*.mp3)|*.mp3|"
"MPEG (*.mpg;*.mpeg)|*.mpg;*.mpeg|"
"ASF (*.asf)|*.asf|"
"AVI (*.avi)|*.avi|"
"WAV (*.wav)|*.wav|"
"所有檔案 (*.*)|*.*||");
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, szFilter);
if (dlg.DoModal() == IDOK) {
CString path = dlg.GetPathName();
path.MakeUpper(); // RealPlayer 部分版本需大寫路徑
m_player.SetSource(path); // 設定媒體來源
m_player.DoPlay(); // 開始播放
SetDlgItemText(IDC_STATUS, path);
}
}
void CSunApplePlayerDlg::OnPlay() { m_player.DoPlay(); }
void CSunApplePlayerDlg::OnPause() { m_player.DoPause(); }
void CSunApplePlayerDlg::OnStop() { m_player.DoStop(); }
void CSunApplePlayerDlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == TIMER_PLAYBACK) {
long pos = m_player.GetPosition(); // 目前播放位置 (毫秒)
long dur = m_player.GetDuration(); // 總長度
if (dur > 0) {
m_sliderProgress.SetRange(0, (int)dur);
m_sliderProgress.SetPos((int)pos);
}
// 音量同步
long vol = m_player.GetVolume(); // 0~100
m_sliderVolume.SetPos((int)vol);
}
CDialog::OnTimer(nIDEvent);
}
RealPlayer 已正確安裝並註冊(regsvr32 rpctrl.dll)。SetSource 失敗:檢查檔案路徑是否包含中文/特殊字元,嘗試 GetShortPathName() 轉換。
圖:完成的播放器介面,支援多格式播放與基本控制
雖然 RealPlayer 已非主流,但其 ActiveX 控件開發模式具有代表性,適用於 Windows Media Player、Flash Player 等同類控件。掌握「控件引入 → 介面綁定 → 方法調用 → 事件處理」四步驟,即可快速整合各類多媒體 ActiveX 元件。