程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 在VC6.0下自制多媒體播放器

在VC6.0下自制多媒體播放器

編輯:關於VC++

VC6.0可謂是微軟的王牌產品,它以強大的功能而贏得了廣大程序員的愛好。而用VC的AppWizard、ClassWizard和其中的各種控件可以方便地建立應用程序。 本文就介紹用VC6.0自帶的一個ActiveX控件----ActiveMovieControl Object,來建立自己的多媒體播放器。此多媒體具有一般的播放功能,能播放*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,還有Repeat功能。

具體步驟:

1. 打開VC6.0,在Projects下選擇MFC AppWizard(exe),並取名MediaPlayer,然後建立基於對話框(Dialog Based)的運用程序。

2. 打開Resource View,選擇其中的對話框,打開其中的主對話框,去掉對話框上的“確定”按鈕,保留“取消”,將Caption改為“Exit”。然後再在上面加上九個按鈕,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;

再加入兩個靜態文本控件,分別為IDC_STATIC,Volume;IDC_STATIC2,Status:Normal。

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文件聽聽,不錯吧!如下圖:

作者信息:

作者:王凱明

聯系地址:復旦大學0024信箱

郵編:200433

電話:021-65832369

電子郵件:[email protected]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved