MFC媒体播放器综合设计报告.docx
《MFC媒体播放器综合设计报告.docx》由会员分享,可在线阅读,更多相关《MFC媒体播放器综合设计报告.docx(29页珍藏版)》请在冰点文库上搜索。
MFC媒体播放器综合设计报告
MF喋体播放器综合设计报告
程序设计实训I》综合设计报告
媒体播放器
学号:
姓名:
专业:
班级:
实验室(中心):
指导老师:
完成时间:
2012.12.14
重庆交通大学信息科学与工程学院综合设计任务书
计I设训序弟程
班
一
件软
鲁
目题
间时成完
主要内容
一一•匚*"4,.•7/士口刁聿-丄纟丄走;;现自与题的析计实上容问课献分设与O内的门文加统私M试在这考需系编讷测存对参、、、/(\、、、、1234567
设计报告要求
注足每‘皆字完统"“-、r〔但儿牯一于多、少式{除得格删不、。
、表整成改张完完修每容立、,内独加表丸告,添张加报作行两>'仁计协进于X対设工息少3灿,分信得F讪告‘对不小CC报题心够中刚仆计代一抑能库环M设峪人rF求据財用交O两和要数如使提4X、wT、/乂、、万1M2竹3并45
O答回场现并亠予
%0%W55总」:
皿汕告演示式报加娥、力计序財与设程钟容、、W内12m核旳考每
版面要求一
1234
恂;居3
O。
彻敲14以6KS/(\
磅巨1.⑴3住1“11后、段为r住、住<后前行、段段
,,体k号号宋、三四号”
备
O训"头考参同请
注
一、引言4
二、系统设计的基本概念与原理4
三、需求分析5
四、系统设计.6
五、编程与实现…9
六、测试内容与结果.11
...17
七、心得体会.16
八、对这门课的建议
教师评阅意见:
签名:
年月曰
成绩:
以下为设计报告正文内容
1.引言
现在人们娱乐的方式多种多样,已经有了很明显的变化,以前的户外运动现在已经在锐减,换而之的是网络游戏与网上聊天,而在同时听听音乐看看电影也成为了巨大的需求,所以很多多媒体播放软件出现了,形形色色各种都有,而我也赶下时髦,体验一下编写的过程,现在才发现这并不难,重要的是插件的插入,而其他的功能实现只需调用相应函数就行了!
2.系统设计的基本概念与原理
1.基本概念与知识
(1).MFC
MFC(MicrosoftFoundationClasses),是一个微软公司提供的类库(class
libraries),以C++类的形式圭寸装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句
柄圭寸装类和很多Windows的内建控件和组件的圭寸装类。
(2)MF编程特点
微软基础类(MicrosoftFoundationClasses),是微软提供的,用于在C++
环境下编写应用程序的一个框架和引擎,VC+是WinDO下开发人员使用的专业C++SDK(SDKStandardSoftWareDevelopKit,专业软件开发平台),MF(就
是挂在它之上的一个辅助软件开发包。
MFdWinAPI与C++的结合,API,即微软提供的WindowsT应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方的编程语言来进行对WindowsF应用程序的开发,使这些被开发出来的应用程序能在WindowsT运行,因此用它们开发出来的应用程序都能工作在Window的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDI来进行Window下应用程序的开发变得容易,因为MF是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在WindowsT用C++&MFC
编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图等。
3开发环境
开发工具:
MicrosoftVisualC++6.0
开发语言:
C++
运行支持环境:
硬件环境:
CPU1.0G以上
内存256M以上
硬盘20G以上
操作系统:
MicrosoftWindows2000,XP,VISTA,Windows7
3.需求分析
1、功能需求
MP3媒体播放器软件是采用MFC设计的Windows应用程序,在MFC勺集成环境下填加文档/视图结构。
这种程序框架和简单应用程序之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要三个类对象:
1框架窗
口类对象,2视图类对象,3文档类对象。
1、2、3组成应用程序的界面。
在加入MP3的解码使程序界面有播放MP3的功能。
MP3媒体播放应用程序是用WindowsMediaPlayer的界面插件,并且应用MediaPlayer的解码功能,使应用程序能够界面清析、播放格式增加并且操作简单。
能够打开文件放进播放列表,点击播放键使其播放,暂停键暂停,停止键停止,重播键重新播放,全屏键全屏播放,退出键退出程序,增大键增大音量,减小键减小音量!
2、性能需求
性能需求是软件工程需求分析的一项重要内容。
本应用程序的的性能需求播放音乐。
具体功能包括播放MP3WAVAVI等媒体格式。
应用程序界面下的功能选项中点击打开,之后点击所要播放的文件,就用将该文件播放。
3、分析
分析的任务是确定待开发的软件项目“做什么”,也就是说待开发的软件所具有的功能。
具体任务包括确定软件系统的功能需求,性能需求。
其中,功能需求应给出软件必须具备的全部功能。
待开发的软件是MP3媒体播放器,要
分析出它所能播放的媒体格式;性能需求是指软件的安全性,可靠性,可维护性,可靠性,精度,容错性能力,运行效率等。
这些是保证开发之后能够正常的使用。
在大型软件的分析中,软件的分析需要反复多次,以达到更加准确,
这是开发软件的基本要求。
4、用户分析
1)要求有稳定的性能,可实现要求的功能;
2)拥有较好的界面,很方便人操作!
4.系统设计
1.系统架构设计
ttEDIAPLAVER
系统调用
返回结果
多媒体播放器的具体功能如下:
(1)打开本地媒体文件(可支持的文件有*.mp3),在打开对话框可以对本地媒体文件进行查找;
(2)播放控制即可通过面板上按钮
(3)暂停播放媒体文件,继续播放媒体文件;
(4)停止播放媒体文件,播放进度条返回起点;
(5)调整播放音量(增大、减小、静音切换);
2.系统功能设计
根据MP播放器的功能设计,将整个系统分为操作界面块(播放器操作界
面)、操作参数处理块(MF(控件)、播放控制块(WindowsMediaPlayer控件)三个模块,这三个模块各自的功能与它们之间的关系构成了整个播放器的构架。
下面是每个模块的具体描述:
操作界面模块:
即多媒体播放器的操作界面,将用户的各项操作作为参数传递给操作参数处理块(MF控件),并接收操作参数处理块的处理结果(列表相关)与播放控制块的播放控制显示处理操作结果,将此信息返回给用户;操作参数处理块:
由MFC通用控件控制,接收来自操作界面的各项操作信息,并对这下操作进行分类处理,若是有关播放控制类的操作则将把操作请求信息加工后传递给模仿控制模块;若是列表控制类的则将这些操作先加工处理再将信息传递给播放块。
再者接受来自播放控制模块的处理数据,并将处理结果综合整理后传递给操作界面,以呈现于用户。
播放控制块:
由WindowsMediaPlayer系统调用控制,接收来自操作参数处理块的媒体播放控制等相关操作,并将处理结果传递给操作参数处理块。
3.子系统与模块设计
(1)打开菜单项,打开本地媒体文件。
调用WindowsAPICFileDialog打开打开文件对话框。
输入参数:
选取的文件。
输出参数:
文件路径。
(2)Play菜单项,将当前暂停或者停止状态的媒体文件的播放状态切换至播放播放状态。
输入参数:
Play指令选取。
输出参数:
播放控制信息。
(3)暂停菜单项,将当前处于播放状态的媒体文件的播放状态切换至暂停。
输入参数:
Pause指令选取。
输出参数:
暂停控制信息。
(4)停止菜单项,将当前处于播放状态或暂停状态的媒体文件的播放状态切换至停止状态。
输入参数:
停止指令选取。
输出参数:
停止控制信息。
(5)退出菜单项,退出多媒体播放器程序。
输入参数:
退出指令选取。
输出参数:
0。
(6)音量增大项,控制音量大小,将音量增大。
输入参数:
音量增大指令选取。
输出参数:
音量增大控制信息。
(7)音量减小项,控制音量大小,将音量减小。
输入参数:
音量减小指令选取。
输出参数:
音量减小控制信息。
(8)播放进度条,能与媒体文件的播放进度同步,以显示当前的播放进度输入参数:
媒体文件的长度信息
5.编程与实现
1.系统详细设计与实现
1.多媒体播放器的详细设计与实现
(1)打开媒体文件
代码:
voidCMediaPlayerDlg:
:
OnOpen()
{
charszFileFilter[]=
"Mp3File(*.mp3)|*.mp3|"
"WmaFile(*.wma)|*.wma|"
"VideoFile(*.dat)|*.dat|"
"WaveFile(*.wav)|*.wav|"
"AVIFile(*.avi)|*.avi|"
"MovieFile(*.mov)|*.mov|"
"MediaFile(*.mmm)|*.mmm|"
"MidFile(*.mid;*,rmi)|*.mid;*.rmi|"
"MPEGFile(*.mpeg)|*.mpeg|"
"AllFile(*.*)|*.*||";〃文件类型过滤
CFileDialog
dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFil
eFilter);
if(dlg.DoModal()==IDOK){
CStringPathName=dlg.GetPathName();
PathName.MakeUpper();m_ActiveMovie.SetFileName(PathName);
}
(2)关闭媒体文件
代码:
voidCMediaPlayerDlg:
:
OnClose()
{
m_ActiveMovie.CloseWindow();
//TODO:
Addyourcontrolnotification
handlercodehere
}
(3)播放打开的文件
代码:
voidCMediaPlayerDlg:
:
OnPlay()
{
m_ActiveMovie.Run();〃播放文件
SetTimer(0,20,NULL);
CStringPathName
=m_ActiveMovie.GetFileName();
intstrLength=PathName.GetLength()+
1;
char*pValue=newchar[strLength];
〜11〜
strncpy(pValue,PathName,strLength);SetWindowText(pValue);
//TODO:
Addyourcontrolnotificationhandlercodehere
}
(4)暂停正在播放的文件
代码:
voidCMediaPlayerDlg:
:
OnPause()
{m_ActiveMovie.Pause();
//TODO:
Addyourcontrolnotificationhandlercodehere
}
(5)停止打开的文件
代码:
voidCMediaPlayerDlg:
:
OnOnstop()
{
m_ActiveMovie.Stop();〃停止播放文件
KillTimer(O);//关掉定时器
//TODO:
Addyourcontrolnotificationhandlercodehere
}
(6)降低音量
代码:
voidCMediaPlayerDlg:
:
OnLower()
{
longVolume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(Volume-100);m_ActiveMovie.Run();
//TODO:
Addyourcontrolnotificationhandlercodehere
}
(7)增大音量
代码:
voidCMediaPlayerDlg:
:
OnUpper()
{
long
Volume=m_ActiveMovie.GetVolume();m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(Volume+100);m_ActiveMovie.Run();
//TODO:
Addyourcontrolnotificationhandlercodehere
}
(8)快放
代码:
voidCMediaPlayerDlg:
:
OnFast()
{
m_ActiveMovie.SetRate(m_ActiveMovie.GetRate()+1);
//TODO:
Addyourcontrolnotification
handlercodehere
}
(9)慢放
代码:
voidCMediaPlayerDlg:
:
OnSlow()
{
if(m_ActiveMovie.GetRate()>1)
m_ActiveMovie.SetRate(m_ActiveMovie.GetRate()-1);
//TODO:
Addyourcontrolnotification
handlercodehere
}
(10)重放
voidCMediaPlayerDlg:
:
OnRepeat()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(!
isRepeat)
{
isRepeat=TRUE;
SetDlgltemText(IDC_STATIC2,"Status:
Repeat");
}
Else
{
isRepeat=FALSE;
SetDlgltemText(IDC_STATIC2,"Status:
Normal");
}
六.测试内容与结果
1.概述
(1)打开文件(从曲库中找出歌曲加入列表中)
(2)播放,暂停,停止,音量调节,快放,慢放
2.测试环境
(1)
电脑機筈微K分辜見
电瞄鳄
案尼VAFOVPCCB5S2C雏记本电脑
Windows1专叩隹64&SP1(DirectX11}
主板内号壬硬S显卡
声卡
网卡
英蒔尔筲二吒酷宫i5-2520M@2.50GHz双核
案尼VA1O典特猱HM65芯片劉
4GB(三■DDK31333MH;)
柱MK6461GSY(640GB/7200砖扮)
AHRadeonHD6630M(1GB/)
LGLGD01E9(15.7跆)
松下DVDRAMUJ8E0D¥D対录机
英特邙6SeriesChipset帚穎首頻
ifSIARS151V2.0GigabitEth#m#tCantroller/素尼
3.测试工具:
MicrosoftVisualC++6.0
此产品授权给£
user
user
ThisprogramisprotectedbyUh気andinternationalcopyrightlam祈describedinHelp阳out.
Copyright1955-19?
8MicrcscftGxpcralion.
经过测试发现此功能正常工作
(2)测试播放按钮
经过测试发现此功能正常工作
(3)测试暂停按钮
经过测试发现此功能正常工作
(4)测试停止按钮
经过测试发现此功能正常工作
(5)声音增大测试
经过测试发现此功能正常工作
(6)声音减小测试
经过测试发现此功能正常工作
七.心得体会
1.
本次课程设计的任务是利用VC+开发一个支持mp3等不同音频格式的多媒体播放器,以便通过课程设计掌握多媒体编程的基本原理。
通过本次课程设计自己进一步熟悉了VisualC++6.0开发环境工具,巩固复习了MF(的应用程序编程,对WindowsMediaPlayer的开发实现有了深刻的了解,更熟悉了C++语言,体会到了面向对象的开发过程。
多媒体播放器的设计是基于MFCS架,当然也是基于Win32开发的应用程序。
在开发过程中为了完善各多媒体播放器功能,设计用户之间友好的接口,使用了MFCS用控件:
按钮、静态文本框、编辑框、组合框、列表框,在制作过程中对这些控件的属性、事件及方法都有了较为熟练的掌握。
另外基于MF开发程序必
定要对整个MFC勺框架有所了解,在设计时也进一步熟悉了MF相关调用的实现。
在实现媒体播放这一重要功能时,采用了调用WindowsMediaPlayer控件来实
现基本播放功能,,通过本次的课程设计,对C++,MFC面向对象的开发过程有了更深的认识与掌握,学习到了MediaPlayer控件调用,充实了自身,学到很多有用的工具、方法。
2.经验教训及其分析
(1)真是不经历不知道,我现在才发现自己的基础是那么的薄弱,MFC的各种控件的使用方法都不是很熟,尤其是列表框,无论怎么学,使用什么方法,都弄不了,真是愁煞我也。
以后一定要极爱按基础的扎实,为以后的编程提供巨
大的方便!
(2)以后做事要做好全局的规划,决定好了之后就不要轻易的改变,否则会误了大事,这让我想到了那个挖井的故事,这儿挖一点挖不出水就不挖了,那儿挖不出水也不挖了,最后挖了好多地方,还是没有挖出来一滴水,所以做什么
事都是浅尝辄止的话,最后是成不了大事的!
就比如说我这次,做了很多却一个也没做成。
(3)通过这次课设,我学会了很多,应该说很熟练的掌握了MFC空件的添加与
使用,也对使用MFC的各种控件驾轻就熟了,也学会了一定的调试技巧,感觉收获颇丰,而遗憾的是自己未能独立的完成一个项目!
八、对这门课的建议
这门课程应该以实验和上机操作为主,通过这种方式才能更好的提高我们的编程能力并锻炼我们的编程思想。
课程体现了较强的应用特色,把介绍内容和实际英语有机的结合起来。
这样的实例即不太大,这样程序不太长;同时实例又涉及一定的范围和意义,通过实例能消化教程的主要内容。
未来解决用户对VisualC++较高层的主要内容
需要,
在介绍有关基本知识后加入一个小规模、可运行的例子来消化、上机实验,以供用户模仿。
实验内容是对教程内容的实训,并且在教程的内容上进一步提高。
实习从一个应用系统开始逐步设计和组装,并且把VisualC++的基本内容包含进来。
通过实验和实习实训,能轻松自如地用VisualC++设计一个小的应用系统。
九•参考文献
1.《VisualC++教程》清华大学出版社郑阿奇主编
2.《VisualC++实训》清华大学出版社郑阿奇主编丁有和编著
3.《VisualC++6.0编程经典案例精解》电子工业出版社张红军
党留群赵天臣等编著
附部分程序代码:
#include"stdafx.h"
#inelude"MediaPlayer.h"
#include"MediaPlayerDIg.h"
#inelude"activemovie3.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE
#endif
/////////////////////////////////////////
////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
〃{{AFX_DATA(CAboutDlg)enum{IDD=IDD_ABOUTBOX};〃}}AFX_DATA
//ClassWizardgeneratedvirtualfunction
overrides
〃{{AFX_VIRTUAL(CAboutDlg)protected:
void
virtual
DoDataExchange(CDataExchange*pDX);//
DDX/DDVsupport
〃}}AFX_VIRTUAL
//Implementationprotected:
〃{{AFX_MSG(CAboutDlg)
〃}}AFX_MSG
DECLARE_MESSAGE_MAP()private:
boolisRepeat;
};
CAboutDlg:
:
CAboutDlg()
CDialog(CAboutDlg:
:
IDD)
{
〃{{AFX_DATA_INIT(CAboutDlg)
〃}}AFX_DATA_INIT
}
void
CAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
〃{{AFX_DATA_MAP(CAboutDlg)
〃}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
〃{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
〃}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////
////////////////////////////////////
//CMediaPlayerDIgdialog
CMediaPlayerDlg:
:
CMediaPlayerDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMediaPlayerDlg:
:
IDD,pPa