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