(
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
标题)
多媒体播放器
用户签名:
开发成员: 孟凡林
开发时间: 2010—12-23
目录
工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录
30引言
31 工作
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
31.1主要工作阶段划分
31.2工作任务分工
32需求分析
32.1概述
42.2用户分析
42.3 约束条件
42.4功能需求
42.5用户界面需求
43设计与实现
43.1概述
53.2详细设计
53.1.1类的抽象及设计
53.3 主要程序文件
63.4开发环境以及部署环境要求
63.5 主要源码
104 测试
104.1概述
104.2 测试环境
104.3测试计划
104.4测试项目及结果
115、
工作总结
关于社区教育工作总结关于年中工作总结关于校园安全工作总结关于校园安全工作总结关于意识形态工作总结
115.1工作成果
125.2过程分析
125.3经验教训及其分析
0引言
现在人们娱乐的方式多种多样,已经有了很明显的变化,以前的户外运动现在已经在锐减,换而之的是网络游戏与网上聊天,而在同时听听音乐看看电影也成为了巨大的需求,所以很多多媒体播放软件出现了,形形色色各种都有,而我也赶下时髦,体验一下编写的过程,现在才发现这并不难,重要的是插件的插入,而其他的功能实现只需调用相应函数就行了!
1 工作计划
1.1主要工作阶段划分
12月20—21
搜索相关资料,学习基础知识,大致设计框架
12月22—23
考虑所用到的数据结构,函数及其作用,做较为细致的分析
12月24日
设计开始,仔细设计!
12月26
写报告
(用表格或图表的形式列出你们小组各个阶段的时间进度大致安排)
1.2工作任务分工
阶段名称
任务名称
任务描述
负责人
协助人
1234
全部
编写软件
孟凡林
孟凡林
2需求分析
2.1概述
1)到网上或图书馆查找相关系统函数实现相应的功能;
2)使用MFC构建相应的用户界面
2.2用户分析
1)要求有稳定的性能,可实现要求的功能;
2)拥有较好的界面,很方便人操作!
2.3 约束条件
(作为开发人员的,通常你的小组的工作时间和人员是一个明显约束;另外站在用户的角度,他们对你有什么约束要求,请从这两个角度进行陈述。)
2.4功能需求
能够打开文件放进播放列表,点击播放键使其播放,暂停键暂停,停止键停止,重播键重新播放,全屏键全屏播放,退出键退出程序,增大键增大音量,减小键减小音量!
2.5用户界面需求
3设计与实现
3.1概述
使用MFC构建相应的用户界面,实现相应的功能----------能够打开文件放进播放列表,点击播放键使其播放,暂停键暂停,停止键停止,重播键重新播放,全屏键全屏播放,退出键退出程序,增大键增大音量,减小键减小音量,然后向其中加入各个函数实现相应的功能!
3.2详细设计
3.1.1类的抽象及设计
1)控件active movie3类,主要用来播放各种类型的文件,其封装的各种成员函数使其成为MFC设计播放器必不可少的控件类;
2)对话框基类cDlg类,及其派生类:
(a)控件repeatbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时再次播放打开的文件;
(b)控件copenbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时提供资源管理器供用户选择文件;
(c)控件playbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时播放打开的文件;
(d)控件pausebtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时暂停播放打开的文件;
(e)控件lowerbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时减小播放音量;
(f)控件upperbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时增大播放音量
(g)控件stopbtn类,作为播放器打开文件的消息响应媒介,能够做到被点击时停止播放打开的文件;
(h)控件fullscreen类,作为播放器打开文件的消息响应媒介,能够做到被点击时全屏播放打开的文件;
至于其他的,当我们使用MFC编程时,会有很多封装的类供我们使用,所以就不一一列举了!
3.3 主要程序文件
1)头文件(为类加入相应的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
流,库):
Activemovie3.h-------控件;
stdafx.h-----框架构成;
多媒体.h-----多媒体的应用;
多媒体Dlg.h------对话框;
resourse.h-----为多媒体.rc服务!
2)源文件(完成各种类的定义与实现):
Activemovie3.cpp-------控件;
stdafx.cpp-----框架构成;
多媒体.cpp----多媒体的应用;
多媒体Dlg.cpp------对话框;
多媒体.rc-----运行过的效果!
3.4开发环境以及部署环境要求
1)
Vs2010;
2)
3.5 主要源码
1)打开文件
void CMyDlg::OnOpenButton()
{
// TODO: Add your control notification handler code here
CString strFilter = "Mp3 File(*.mp3)|*.mp3| ";
strFilter += "MPEG File(*.mpg;*.mpeg)|*.mpg;*.mpeg| ";
strFilter += "Wave File(*.wav)|*.wav| ";
strFilter += "AVI File(*.avi)|*.avi| ";
strFilter += "All File(*.*)|*.*| "; //过滤适当的文件必须以0区分,以00结束,否则会出现参数不正确
CFileDialog dlgOpen(TRUE,NULL,NULL,OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,strFilter,this);//为CFileDialog定义对象
DWORD MAXFILE = 2412; // 分配足够空间
dlgOpen.m_ofn.nMaxFile = MAXFILE; // 设置buffer的大小
CString strFileName;
char* buf = new char[MAXFILE]; //分配空间
dlgOpen.m_ofn.lpstrFile = buf;
dlgOpen.m_ofn.lpstrFile[0] = NULL; //赋值
if(IDOK == dlgOpen.DoModal())
{
POSITION pos = dlgOpen.GetStartPosition();
while (pos != NULL)
{
strFileName = dlgOpen.GetNextPathName(pos);
// 获取独立文件名
m_list1.InsertString(m_list1.GetCount(),strFileName);//加至播放列表
}
}
delete [] buf; //释放空间
}
2)播放文件
void CMyDlg::OnPlayButton()
{
// TODO: Add your control notification handler code here
m_ActiveMovie.Run();//播放文件
SetTimer(0,20,NULL);//设置定时器
}
3)暂停播放
void CMyDlg::OnPauseButton()
{
// TODO: Add your control notification handler code here
m_ActiveMovie.Pause();
}
4.停止播放
void CMyDlg::OnStopButton()
{
// TODO: Add your control notification handler code here
m_ActiveMovie.Stop();//停止播放文件
KillTimer(0);//关掉定时器
}
5.重复播放
void CMyDlg::OnReapetButton()
{
// TODO: Add your control notification handler code here
if(!isRepeat)
{
isRepeat=TRUE;
SetDlgItemText(IDC_STATIC2,"Status:Repeat");
}
else{
isRepeat=FALSE;
SetDlgItemText(IDC_STATIC2,"Status:Normal");
}
}
6.增大声音
void CMyDlg::OnUpperButton()
{
// TODO: Add your control notification handler code here
long Volume=m_ActiveMovie.GetVolume();
m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(Volume+100);
m_ActiveMovie.Run();
}
7.减小声音
void CMyDlg::OnLowerButton()
{
// TODO: Add your control notification handler code here
long Volume=m_ActiveMovie.GetVolume();
m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(Volume-100);
m_ActiveMovie.Run();
}
8.全屏播放
void CMyDlg::OnFullButton()
{
// TODO: Add your control notification handler code here
m_ActiveMovie.Pause();
m_ActiveMovie.SetFullScreenMode(true);
m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);
m_ActiveMovie.Run();
}
9.关闭窗口
void CMyDlg::OnCloseButton()
{
// TODO: Add your control notification handler code here
m_ActiveMovie.CloseWindow();²
}
10.退出
void CMyDlg::OnClickedExitButton()
{
// TODO: Add your control notification handler code here
PostQuitMessage(0);//;
}
4 测试
4.1概述
1)打开文件(从曲库中找出歌曲加入列表中)
2)播放,暂停,停止,全屏显示,停止,重播(active movie实现功能)
4.2 测试环境
1)
2)vs2010
4.3测试计划
1)打开文件
2)播放及各种键的使用
3)多次运行,检查稳定性
4.4测试项目及结果
1)打开文件
2)
5、工作总结
5.1工作成果
工作成果不是很明显, 因为我自作自受,霉运连连让我乱了阵脚,最后的一个大悲剧直接把我将死了!我没有编写出来一个成功的程序,以失败告终!我完了,Oh,myGod!
5.2过程分析
唉!因为自己眼光不够敏锐,没有选择正确的题目,一开始选择了邮件收发程序,当框架做好以后,开始实现各种功能了,才发现自己并不明白MAPI是怎么一回事,到处查也不是很会用,协议更没搞清楚,而且也不知道应该调用哪个系统函数来实现附件的添加,并且第三步由于协议问题也没头绪,联想到上学期做了好久也没搞出个好程序的经验,我就果断放弃了,改做文件编辑,结果又是因为搞不清怎么调出资源管理器搞的头皮发麻,最后又是悲剧的放弃了,现在一想都后悔啊!意志太不坚定了,就那么个小困难就把我给吓到了,唉!
折腾了两天半已经是星期三的下午了,眼看期限快到了,我没办法,急得要命,没办法,这时候想起来老师曾经说过网上的媒体播放器很多,于是就到网上去搜了一个,结果一弄。唉!问题又出来了,我的机子里没装那个active movie控件,又搜了一下,找到插入控件的方法,使用运行命令插入了控件,但还是没有,又一搜,哎呀,真悲剧,2010版中找不到插入那个控件的方法。怎么办,怎么办?可急死我了,最后无奈到机房插入了那个控件,一点一点的加入了各个按钮,然后添加上了各种函数,谁知这时桌面突然显示,请输入用户名和密码,咋回事?唉!又悲剧了,钱用完了?Oh,myGod,不是吧?我还没保存那!然后,一翻衣兜,哎,没钱,怎么办?没办法,第二天,再次走入机房,这次聪明了,只弄了个插件,回到宿舍,因为高版本肯定能兼容低版本,所以继续用2010版的完善其它工作,最后大功告成,一运行,不行,参数数目不对。这时,我们班回来了一个人,说老师在为我们开了一教室2402,于是我下午就去问老师您,结果老师您一下子来了句抄的,一下子把我给弄晕了!哎呀,老师真厉害呀,一眼就看出来了,但是当我回来以后又运行还是无效的参数数目,
并没有那个错误,还是不行啊!我彻底无奈了,仔细查找各种可能,但始终解决不了,最后只得放弃,听取命运的宣判,最后竟然还是让我找出来错误在哪,我要崩溃了,不过还是强忍着回到宿舍,继续我的寻错之旅!唉,加油!
哈哈!找到了,原来使用VS2010之后再用VC++6.0会出现缺少文件,不能兼容。而其中有一段
CString PathName= dlgOpen.GetPathName();
PathName.MakeUpper();
m_ActiveMovie.SetFileName(PathName);
中有非法字符很难运行,所以会出现参数数目不正确!
5.3经验教训及其分析
(1)真是不经历不知道,我现在才发现自己的基础是那么的薄弱,MFC的各种控件的使用方法都不是很熟,尤其是列表框,无论怎么学,使用什么方法,都弄不了,真是愁煞我也。本来在文件编辑放弃以后,做了多媒体播放器,我突然发现了调出资源管理器并选择的方法,但是因为listbox不太会用,不能使用它打开文件,所以只得放弃,今天一个上午的努力也白费了!以后一定要极爱按基础的扎实,为以后的编程提供巨大的方便!
(2)以后做事要做好全局的规划,决定好了之后就不要轻易的改变,否则会误了大事,这让我想到了那个挖井的故事,这儿挖一点挖不出水就不挖了,那儿挖不出水也不挖了,最后挖了好多地方,还是没有挖出来一滴水,所以做什么事都是浅尝辄止的话,最后是成不了大事的!就比如说我这次,做了很多却一个也没做成,最后老师还不满意。还不如一直做第一个那,起码来说不会去抄啊!
(3)还有,以后千万不能从网上直接拷代码了,或者说一旦复制就不能做丝毫的改动,否则会出现好多错误,只得一顶一点改回去!
(4)通过这次课设,我学会了很多,应该说很熟练的掌握了MFC控件的添加与使用,也对使用MFC的各种控件驾轻就熟了,外也学会了一定的调试技巧,感觉收获颇丰,而遗憾的是自己未能独立的完成一个项目!
第 页