用Visual C++ 6.0設計媒體播放器 (轉載)
VC6.0可謂是微軟的王牌產(chǎn)品,它以強大的功能而贏(yíng)得了廣大程序員的愛(ài)好。而用VC的AppWizard、ClassWizard和其中的各種控件可以方便地建立應用程序。 本文就介紹用VC6.0自帶的一個(gè)ActiveX控件----ActiveMovieControl Object,來(lái)建立自己的多
媒體播放器。
此
多媒體具有一般的播放功能,能播放*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,還有Repeat功能。
具體步驟:
1. 打開(kāi)VC6.0,在Projects下選擇
MFC AppWizard(exe),并取名MediaPlayer,然后建立基于對話(huà)框(Dialog Based)的運用程序。
2. 打開(kāi)Resource View,選擇其中的對話(huà)框,打開(kāi)其中的主對話(huà)框,去掉對話(huà)框上的“確定”按鈕,保留“取消”,將Caption改為“Exit”。然后再在上面加上九個(gè)按鈕,ID和Caption分別為
IDC_OPEN,Open;
IDC_PLAY,Play;
IDC_PAUSE,Pause;
IDC_STOP,Stop;
IDC_CLOSE,Close;
IDC_LOWER,<<=;
IDC_UPPER,=>>;
IDC_FULLSCREEN,Full;
IDC_REPEAT,Repeat;
再加入兩個(gè)靜態(tài)文本控件,分別為IDC_STATIC,Volume;IDC_STATIC2,Status:Nomal
3. 再打開(kāi)Projects->Add to Project->Components and Controls->Registered ActiveX Controls對話(huà)框,選擇其中的ActiveMovieControl Object, Insert,OK之后,你會(huì )發(fā)現你的控件面板上多了一項ActiveMovieControl Object,將它選中,直接放在你的對話(huà)框上就行了。按Ctrl+W打開(kāi)ClassWizard為它添加變量CActiveMovie3 m_ActiveMovie。各控件的布局如圖:
4. 接下來(lái),就是為程序添加消息處理函數。打開(kāi) ClassWizard,為各個(gè)按鈕加入消息處理函數。在MediaPlayerDlg.cpp文件里為各消息處理函數添加代碼,各代碼如下:
void CMediaPlayerDlg::OnClose()
{
m_ActiveMovie.CloseWindow();//關(guān)閉窗口
}
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(*.*)|*.*||";//文件類(lèi)型過(guò)濾
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);//設置定時(shí)器
}
void CMediaPlayerDlg::OnStop()
{
m_ActiveMovie.Stop();//停止播放文件
KillTimer(0);//關(guān)掉定時(shí)器
}
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();
}
(注釋?zhuān)汉瘮礝nTimer()需通過(guò)ClassWizard(Ctrl+W)來(lái)添加,不能直接復制)
void CMediaPlayerDlg::OnTimer(UINT nIDEvent)
{
double CurrentPos=m_ActiveMovie.GetCurrentPosition();
if(CurrentPos==0&&isRepeat)//如果當前是文件的起始位置而且為重復播放狀態(tài)
m_ActiveMovie.Run();
CDialog::OnTimer(nIDEvent);
}
5. 為使播放器具有Repeat功能,需在頭文件MediaPlayerDlg.h 加入控制變量BOOL isRepeat;類(lèi)型可為Private。同時(shí)修改OnInitDialog()函數:
BOOL CMediaPlayerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
isRepeat=FALSE;
……
}
(注:第6步可以不做,只是按鈕仍是方形按鈕,而做了第6步后則為圓形的)
6. 這樣此播放器就具有一般的媒體播放功能了,但為了有更好的用戶(hù)界面,我將按鈕變成了圓形的。為此,要在工程里加入文件RoundButton.h以及RoundButton.cpp用CRoundButton來(lái)代替CButton。先打開(kāi)類(lèi)向導,為上述按鈕添加對應變量。
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;
(注:以上的個(gè)變量本來(lái)是Cbutton類(lèi)型的,你要手動(dòng)將他們改為CRoundButton,并在此頭文件里加上#include "RoundButton.h"。)
7. 好,現在可以編譯、連接并運行了,直接按Ctrl+F5,OK便可以看自己的杰作了,打開(kāi)個(gè)mp3文件聽(tīng)聽(tīng),不錯吧!如下圖: