3. 再打开Projects->Add to Project->Components and Controls->Registered ActiveX Controls对话框,选择其中的ActiveMovieControl Object, Insert,OK之后,你会发现你的控件面板上多了一项ActiveMovieControl Object,将它选中,直接放在你的对话框上就行了。按Ctrl+W打开ClassWizard为它添加变量CActiveMovie3 m_ActiveMovie。各控件的布局如图:

4. 接下来,就是为程序添加消息处理函数。打开 ClassWizard,为各个按钮加入消息处理函数。在MediaPlayerDlg.cpp文件里为各消息处理函数添加代码,各代码如下:
void CMediaPlayerDlg::OnClose() { m_ActiveMovie.CloseWindow();//关闭窗口 }
void CMediaPlayerDlg::OnOpen() { char szFileFilter[]="Mp3 File(*.mp3)|*.mp3|" "Wma File(*.wma)|*.wma|" "Video File(*.dat)|*.dat|" "Wave File(*.wav)|*.wav|" "AVI File(*.avi)|*.avi|" "Movie File(*.mov)|*.mov|" "Media File(*.mmm)|*.mmm|" "Mid File(*.mid;*,rmi)|*.mid;*.rmi|" "MPEG File(*.mpeg)|*.mpeg|" "All File(*.*)|*.*||";//文件类型过滤
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal()==IDOK){ CString PathName=dlg.GetPathName(); PathName.MakeUpper(); m_ActiveMovie.SetFileName(PathName); } }
void CMediaPlayerDlg::OnPlay() { m_ActiveMovie.Run();//播放文件 SetTimer(0,20,NULL);//设置定时器 }
void CMediaPlayerDlg::OnStop() { m_ActiveMovie.Stop();//停止播放文件 KillTimer(0);//关掉定时器 }
void CMediaPlayerDlg::OnPause() { m_ActiveMovie.Pause(); }
void CMediaPlayerDlg::OnUpper() { long Volume=m_ActiveMovie.GetVolume(); m_ActiveMovie.Pause(); m_ActiveMovie.SetVolume(Volume+100); m_ActiveMovie.Run(); }
void CMediaPlayerDlg::OnLower() { long Volume=m_ActiveMovie.GetVolume(); m_ActiveMovie.Pause(); m_ActiveMovie.SetVolume(Volume-100); m_ActiveMovie.Run(); }
void CMediaPlayerDlg::OnRepeat() { if(!isRepeat){ isRepeat=TRUE; SetDlgItemText(IDC_STATIC2,"Status:Repeat"); } else{ isRepeat=FALSE; SetDlgItemText(IDC_STATIC2,"Status:Normal"); } }
void CMediaPlayerDlg::OnFulscreeen() { m_ActiveMovie.Pause(); m_ActiveMovie.SetFullScreenMode(true); m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED); m_ActiveMovie.Run(); }
(注释:函数OnTimer()需通过ClassWizard(Ctrl+W)来添加,不能直接复制) void CMediaPlayerDlg::OnTimer(UINT nIDEvent) { double CurrentPos=m_ActiveMovie.GetCurrentPosition(); if(CurrentPos==0&&isRepeat)//如果当前是文件的起始位置而且为重复播放状态 m_ActiveMovie.Run(); CDialog::OnTimer(nIDEvent); } |
5. 为使播放器具有Repeat功能,需在头文件MediaPlayerDlg.h 加入控制变量BOOL isRepeat;类型可为Private。同时修改OnInitDialog()函数:
BOOL CMediaPlayerDlg::OnInitDialog() { CDialog::OnInitDialog();
isRepeat=FALSE; …… } |
(注:第6步可以不做,只是按钮仍是方形按钮,而做了第6步后则为圆形的)
6. 这样此播放器就具有一般的媒体播放功能了,但为了有更好的用户界面,我将按钮变成了圆形的。为此,要在工程里加入文件RoundButton.h以及RoundButton.cpp用CRoundButton来代替CButton。先打开类向导,为上述按钮添加对应变量。
CRoundButton m_FullScreen; CRoundButton m_Repeat; CRoundButton m_Upper; CRoundButton m_Lower; CRoundButton m_Close; CRoundButton m_Exit; CRoundButton m_Stop; CRoundButton m_Play; CRoundButton m_Pause; CRoundButton m_Open; |
(注:以上的个变量本来是Cbutton类型的,你要手动将他们改为CRoundButton,并在此头文件里加上#include "RoundButton.h"。)
7. 好,现在可以编译、连接并运行了,直接按Ctrl+F5,OK便可以看自己的杰作了,打开个mp3文件听听,不错吧!如下图:

|