基于MFC的多媒体播放器的设计与实现

2017年05月29日 12点热度 0人点赞 0条评论





实验1  基于MFC的多媒体播放器的设计与实现

 word文档下载

一、实验目的:

利用MFC在VC++或其它语言环境下设计一个多媒体播放器,进一步熟悉与掌握多媒体编程的基本技术与方法。

二、实验要求:

1、制作一个如下图的多媒体播放器界面,并尽量实现全部或绝大部分功能。

 

图1 多媒体播放器功能要求

2、用.mp3、.avi等格式文件进行播放测试,并获取播放效果图。

3、完成ABOUTBOX的版权信息,请认真真实填写本人信息,否则当缺做实验或抄袭别人程序处理。

图2 必须完成的版权个人信息

4、完成并测试程序后将源程序文件夹压缩后上传网络课堂,请确保程序的正确性与可执行性,老师通过执行你的程序从而给你计算本次实验成绩。

5、认真完成实验报告,必须包括实验目的,实验工具、设计框图、实验步骤、所完成的主要设计内容与方法、实验分析与总结等内容。请尽量笔写,其中源代码与效果图可以打印后粘贴到实验报告本上


实验指导与基本步骤:

使用VC++6.0的AppWizard、ClassWizard和其中的各种控件可以方便地建立各种应用程序。但是想要实现更高级更复杂的功能,就要借助丰富的ActiveX控件资源。本实验计划使用VC++6.0自带的一个ActiveX控件——ActiveMovieControl Object,来设计多媒体播放器。此多媒体具有一般的播放功能,能播放:*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有Repeat功能。

1、注册控件:在windows“运行”里写入:regsvr32 msdxm.ocx 单击确定。

2、打开VC6.0,在Projects下选择MFC AppWizard(exe),并取名VedioPlayer,然后建立基于对话框的应用程序。最后删除“确定”按钮,保留“取消”按钮。

图3

图4

图5

图6

图7 MFCAppWizard生成的对话框

3、打开Resource View,选择其中的对话框,打开其中的主对话框,去掉对话框上的“确定”按钮,保留“取消”,将Caption改为“退出”。然后再在上面加上几个按钮,ID和Caption分别为

  IDC_OPEN,打开;

  IDC_PLAY,播放;

  IDC_PAUSE,暂停;

  IDC_STOP,停止;

  IDC_CLOSE,关闭;

  IDC_LOWER,-;

  IDC_UPPER,+;

  IDC_FULLSCREEN,全屏;

。。。。。。

最终如图8所示。

图8 播放器功能界面

 

4、加入ActiveMovieControl控件。打开Projects->Add to Project->Components andControls->Registered ActiveX Controls对话框,选择其中的ActiveMovieControl Object, Insert,OK之后,会发现控件面板上多了一项ActiveMovieControl Object,将它选中,直接放在对话框上,并拖成合适大小。最终效果如图11所示。

图9

图10

图11  最终界面效果

5、为ActiveMovieControl控件设置变量m_ActiveMovie。点中它,按Ctrl+W打开ClassWizard为它添加变量m_ActiveMovie。

图12为ActiveMovieControl控件设置变量m_ActiveMovie

6、为程序添加消息处理函数。打开ClassWizard,为各个按钮加入消息处理函数。在MediaPlayerDlg.cpp文件里为各消息处理函数添加代码,部分代码如下:

void CVediorDlg::OnClose()

{

    m_ActiveMovie.CloseWindow();//关闭窗口

}

 

void CVedioPlayerDlg::OnOpen()

{

       char szFileFilter[]=

              "Mp3 File(*.mp3)|*.mp3|"

              "Wma File(*.wma)|*.wma|"

              "VideoFile(*.dat)|*.dat|"

              "WaveFile(*.wav)|*.wav|"

              "AVI File(*.avi)|*.avi|"

              "MovieFile(*.mov)|*.mov|"

              "MediaFile(*.mmm)|*.mmm|"

              "MidFile(*.mid;*,rmi)|*.mid;*.rmi|"

              "MPEGFile(*.mpeg)|*.mpeg|"

              "All File(*.*)|*.*||";//文件类型过滤

       CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);

       if(dlg.DoModal()==IDOK){

              CStringPathName=dlg.GetPathName();

              PathName.MakeUpper();//这个函数可以将CString字符转化为一个大写的字符串

              m_ActiveMovie.SetFileName(PathName);

       }

}

 

void CVedioPlayerDlg::OnPlay()

{

       m_ActiveMovie.Run();//播放文件

       SetTimer(0,20,NULL);//设置定时器

//0:计时器的名称;20:时间间隔,单位是毫秒;NULL:使用OnTimer函数。

 

}

 

void CVedioPlayerDlg::OnStop()

{

       m_ActiveMovie.Stop();//停止播放文件

       KillTimer(0);//关掉定时器

}

 

void CVedioPlayerDlg::OnPause()

{

       m_ActiveMovie.Pause();//暂停播放

}

 

void CVedioPlayerDlg::OnUpper()//增加音量

{

       long Volume=m_ActiveMovie.GetVolume();

       m_ActiveMovie.Pause();

       m_ActiveMovie.SetVolume(Volume+100);

       m_ActiveMovie.Run();

}

 

void CVedioPlayerDlg::OnLower()//减少音量

{

       long Volume=m_ActiveMovie.GetVolume();

       m_ActiveMovie.Pause();

       m_ActiveMovie.SetVolume(Volume-100);

       m_ActiveMovie.Run();

}

 

void CVedioPlayerDlg::OnFulscreeen()//全屏播放

{

       m_ActiveMovie.Pause();

       m_ActiveMovie.SetFullScreenMode(true);

       m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);

       m_ActiveMovie.Run();

}

 

这里需要注意的是,下面的函数OnTimer()需通过ClassWizard(Ctrl+W)来添加,不能直接复制:

图13

void CVedioPlayerDlg::OnTimer(UINT nIDEvent)

{

       doubleCurrentPos=m_ActiveMovie.GetCurrentPosition();

       if(CurrentPos==0&&isRepeat)//如果当前是文件的起始位置而且为重复播放状态

              m_ActiveMovie.Run();

      

       CDialog::OnTimer(nIDEvent);

}

7、为使播放器具有重复播放功能,需在头文件VedioPlayerDlg.h 加入控制变量BOOLisRepeat;类型可为Private。

 

同时修改OnInitDialog()函数:

 

BOOL CMediaPlayerDlg::OnInitDialog()

{

CDialog::OnInitDialog();

isRepeat=FALSE;

……

}

8、其他功能请自己设计解决。

未经允许不得转载!基于MFC的多媒体播放器的设计与实现

update

纸上得来终觉浅, 绝知此事须躬行。