1、 学 号: 课 程 设 计 课程名称 可视化编程(VC) 学 院 计算机科学和技术学院 专 业 软件工程专业 班 级 姓 名 指导老师 —— 第2学期 目录 引言.............................................................................................
2、1 1.设计要求描述.................................................................................................................................1 2.基础操作及功效说明 ..........................................................................................
3、1 2.1基础操作 ............................................................................................................................1 2.3功效说明 ............................................................................................................................1 3
4、软件各功效模块介绍 ....................................................................................................................2 4.软件各功效模块说明 ....................................................................................................................3 4.1“播放/暂停”功效实现 ........................
5、3 4.2“快退”功效实现...................................................................................................................4 4.3“快进”功效实现.................................................................................
6、4 4.4“上一首”功效实现...............................................................................................................4 4.5“下一首”功效实现...............................................................................................................4 4.6“停止”功效实现.
7、5 4.7“音量/静音”功效实现 ....................................................................................................5 4.8“全屏”功效实现.......................................................
8、5 4.9“(音量)+”功效实现 ....................................................................................................5 4.10“音量调整”功效实现 ....................................................................................................6 4.11
9、音量)-”功效实现 ....................................................................................................6 4.12“相关”功效实现.............................................................................................................6 4.13“退出”功效实现 ................................................
10、6 4.14“次序,随机,单曲播放”功效实现 ............................................................................7 4.15“清空列表”功效实现 ....................................................................................................8 4.16“从列表移除”功效实现....
11、8 4.17“添加文件”功效实现 ....................................................................................................8 4.18“保留列表”功效实现 ....................................................................
12、9 5.运行界面.........................................................................................................................................9 6.问题及处理方案 .............................................................................................................
13、10 7.个人体会.......................................................................................................................................11 8.参考文件....................................................................................................................................
14、12 引言 在个人计算机流行今天,多媒体播放软件已成为几乎每台个人计算机必备软件之一,大家在闲暇时能够用多媒体播放软件播放视频音乐来达成娱乐作用。现在比较流行播放软件有baidu影音、快播、迅雷播放器等,这些播放器全部支持大多数格式视频音频文件,即使她们实现功效大同小异,但每款播放软件全部有自己独特风格。用户经过体验多种不一样播放软件进行对比来找到一款适合自己播放软件。 VC++6.0拥有强大功效,经过用VC++6.0软件能够编写各式各样应用程序,该课程设计就是利用VC++6.0来编写播放器软件,能够播放*.mp3、*.wma、*.mdi、*
15、wav、*avi、*dat、*rmvb、*mp4等格式音频视频文件。 1.设计要求描述 1.1制作一个含有自己设计风格媒体播放器。 1.2要求能随机选择要播放文件,实现前进,回退,暂停,循环播放,音量大小调整等基础功效。 1.3要求能播放多个格式(最少三种以上)音频视频格式文件。 1.4能够实现其它附加功效 1.5界面良好,功效完善 2.基础操作及功效说明 2.1基础操作 该播放器含有播放、暂停、快退、快进、停止、静音、音量调整、全屏等 基础功效,同时还含有自制播放列表,能够根据列表上次序进行上一首、下一首播放,对列表能够进行添加文件、保留列表
16、清空列表、从列表移除等操作,而且设定了播放模式,包含次序播放、随机播放、单曲播放三个播放模式能够选择。 2.3功效说明 该播放器使用了Windows Media Player控件和多种类型按钮,和一个列表框和滚动条控件,并由Windows Media Player对多媒体文件进行解码和播放。 因为Windows Media Player特点,首先要在初始化中对CWMPControls,CWMPSettings等十七个类对象进行绑定和关联。对Windows Media Player操作有播放、暂停、快退、快进、停止、静音、音量调整、音量增加减小、全屏,这些功效实现关键是经过调用C
17、WMPControls,CWMPSettings和CWMPPlayer4类中组员函数来实现。对于播放列表框操作,添加文件是利用listbox中AddString函数把文件添到播放列表里,在由CWMPPlayer4类中组员函数加载文件进行播放;保留列表是新创建一个名为listtxt文本文件,再将列表框内容逐一写到该文本文件里;清空列表操作是调用listbox类ResetContent函数将列表框内容清除,并随即调用保留函数使list文件中内容也清空;从列表移除是将光标目前选定位置在列表框中删除。至于播放模式选择是利用ontimer函数和settimer函数来控制播放模式。 3.软件各功
18、效模块介绍 首先是添加文件,将文件添加到播放列表,再列表框里双击文件,此时文件开始播放,然后可进行播放、暂停、快退、快进、停止、静音、音量调整、全屏、上一首、下一首、次序播放、随即播放、单曲播放等操作,对于音量调整可经过滑动音量滑块条和点击增大减小按钮。 该播放软件中控件关联变量,控件ID以下表所表示。 控件Caption 控件ID 关联变量类型 关联变量名 WMPlayer IDC_OCX1 CWMPlayer4 m_Player ListBox IDC_LIST1 CListBox m_list Button IDC
19、PAP CButton m_playpause SLIDER IDC_SLIDET1 CSliderCtrl m_pSlide Button IDC_VOICE CButton m_voice 表1 控件ID及关联消息响应函数 功效 控件ID 消息响应函数 播放/暂停 IDC_PAP OnPap() 快退 IDC_FASTREVERSE OnFastreverse() 快进 IDC_FASTFORWARD OnFastforward() 上一首 IDC
20、BUTTONPRE OnButtonpre() 下一首 IDC_BUTTONNEXT OnButtonnext() 停止 IDC_STOP OnStop() 音量/静音 IDC_VOICE OnVoice() 全屏 IDC_FULLSCREEM OnFullscreem() (音量)+ IDC_DECVOI OnDecvoi() (音量)- IDC_INCVOI OnIncvoi() 相关 IDC_ABOUT OnAbout() 退出 IDC_EXIT OnExit() 次序播放 OnRadio1 OnTimer() 随机播放 On
21、Radio2 OnTimer() 单曲播放 OnRadio3 OnTimer() 清空列表 IDC_CLEAN OnClean() 从列表移除 IDC_REMOVE OnRemove() 添加文件 IDC_ADD OnAdd() 保留列表 IDC_SAVE OnSave() 表2 表1和表2所列出是对应控件对象关联,另外还需要有一个CString类型变量名来保留文件路径及文件名。 类名 对象名 CSting m_FilePathName 除了对各个控件关联变
22、量和消息响应函数,还要对对话框类进行消息响应函数关联,还需要用到WM_TIMER消息响应函数和SetTimer()和KillTimer()函数,控制将对话框类进行该消息响应函数关联并书写。 4.软件各功效模块说明 4.1“播放/暂停”功效实现 void CPlayerofEasonDlg::OnPap() { CString str; m_playpause.GetWindowText(str); if(str=="播放") { m_playpause.SetWindowText("已暂停"); m_Player.GetContro
23、ls().pause(); } else { m_playpause.SetWindowText("播放"); m_Player.GetControls().play(); } } 4.2“快退”功效实现 void CPlayerofEasonDlg::OnFastreverse() { m_Player.GetControls().fastReverse(); } 4.3“快进”功效实现 void CPlayerofEasonDlg::OnFastforward() { m_
24、Player.GetControls().fastForward(); } 4.4“上一首”功效实现 void CPlayerofEasonDlg::OnButtonpre() { CString str; int index=m_list.GetCurSel()-1;//光标减一 if(index<0) index=m_list.GetCount()-1;//假如播放完第一曲就自动播放最终一首 m_list.GetText(index,str);//取得目前光标所指路径字符串 m_Player.SetUrl(str);//开始播放上一首
25、 m_list.SetCurSel(index);//自动置光标 4.5“下一首”功效实现 void CPlayerofEasonDlg::OnButtonnext() { CString str; int index=m_list.GetCurSel()+1;//光标加一 if(index>=m_list.GetCount()) index=0;//假如播放完最终一曲就自动播放第一首 m_list.GetText(index,str);//取得目前光标所指路径字符串 m_Player.SetUrl(str); //开始播放下一
26、首 m_list.SetCurSel(index);//自动置光标 } 4.6“停止”功效实现 void CPlayerofEasonDlg::OnStop() { m_Player.GetControls().stop (); } 4.7“音量/静音”功效实现 void CPlayerofEasonDlg::OnVoice() { m_voice.SetWindowText("已静音"); m_Player.GetSettings().SetVolume(0); m_pSlide.SetPos(0); } 4.8“全屏”功效实
27、现 void CPlayerofEasonDlg::OnFullscreem() { long Playstate=m_Player.GetPlayState (); if(!Playstate) { MessageBox("请先加载视频O.O",NULL,MB_OK); } else { m_Player.SetFullScreen (true); SetFocus(); } } 4.9“(音量)+”功效实现 void CPlayerofEasonDlg::OnIncvoi() { m_Player.GetSett
28、ings().SetVolume(m_Player.GetSettings().GetVolume()+10); m_pSlide.SetPos(m_pSlide.GetPos()+10); if(m_pSlide.GetPos()>0) m_voice.SetWindowText("音量"); } 4.10“音量调整”功效实现 void CPlayerofEasonDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { if(pScrollBar->GetDlgCtrlID()==I
29、DC_SLIDER1) { CSliderCtrl*pSlide=(CSliderCtrl*)pScrollBar; m_Player.GetSettings().SetVolume(pSlide->GetPos()); } if(m_pSlide.GetPos()>0) m_voice.SetWindowText("音量"); CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } 4.11“(音量)-”功效实现 void CPlayerofEasonDlg::OnDecvoi() { //
30、 TODO: Add your control notification handler code here m_Player.GetSettings().SetVolume(m_Player.GetSettings().GetVolume()-10); m_pSlide.SetPos(m_pSlide.GetPos()-10); } 4.12“相关”功效实现 void CPlayerofEasonDlg::OnAbout() { // TODO: Add your control notification handler code here CAboutDlg
31、 aboutDlg; aboutDlg.DoModal(); } 4.13“退出”功效实现 void CPlayerofEasonDlg::OnExit() { int check=AfxMessageBox("确定要退出吗?",MB_OKCANCEL); if(check==IDOK) { CDialog::OnCancel();//点击确定则退出 KillTimer(1); } else { return; //取消退出 } } 4.14“次序,随机,单曲播
32、放”功效实现 void CPlayerofEasonDlg::OnTimer(UINT nIDEvent) { int index=m_Player.GetPlayState();//获取播放状态 if(index==1)//假如播放完成 { if(((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck())//假如是次序播放 { CString str; int index=m_list.GetCurSel()+1; if(index>=m_
33、list.GetCount()) index=0;//假如播放完最终一曲就自动播放第一首 m_list.GetText(index,str); m_Player.SetUrl(str); m_list.SetCurSel(index);//自动置光标 }//次序播放 if(((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck())//随机播放 { srand(time(0));//目标在于每次全部能产生不一样随机数序列 m_l
34、ist.SetCurSel(rand()%m_list.GetCount());//随机选择0-m_list.GetCount()-1任意一个数即随即选择m_list里文件 m_list.GetText(m_list.GetCurSel(),m_FilePathName); m_Player.SetUrl(m_FilePathName); } if(((CButton *)GetDlgItem(IDC_RADIO3))->GetCheck())//单曲循环 { m_list.GetText(m_list.GetCurSel(),m_F
35、ilePathName); m_Player.SetUrl(m_FilePathName); } } CDialog::OnTimer(nIDEvent); } 4.15“清空列表”功效实现 void CPlayerofEasonDlg::OnClean() { CStdioFile file; m_list.ResetContent();//删除列表 file.Open(".\\list.txt",CFile::modeCreate); } 4.16“从列表移除”功效实现 void CPlayerofEasonDlg
36、OnRemove() { m_list.DeleteString(m_list.GetCurSel());//删除目前光标所选择行 OnSave();//自动保留删除某一行后播放列表 } 4.17“添加文件”功效实现 void CPlayerofEasonDlg::OnAdd() { Char szFileFilter[]="音频文件(*.mp3;*wav;*.mp4;*.rmvb;*.avi;*.mpeg;*.dat;*.mpga;*.mov;*.3gp;*.wma)|*.mp3;*wav;*.mp4;*.rmvb;*.avi;*.mpeg;*.dat
37、mpga;*.mov;*.3gp;*.wma||"; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,szFileFilter); if(dlg.DoModal()) { POSITION pos=dlg.GetStartPosition(); while(pos!=NULL) { m_FilePathName=dlg.GetNextPathName(pos);//得到完整文件名,包含目录名和扩展名 m_list.Add
38、String(m_FilePathName);//增加到播放列表
}
}
}
4.18“保留列表”功效实现
void CPlayerofEasonDlg::OnSave()
{
CStdioFile file;
file.Open(".\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);//打开指定文件
for(int i=0;i 39、emp);
strtemp+="\n";
file.WriteString(strtemp);//保留播放列表
}
}
5.运行界面
6.问题及处理方案
6.1首次编译连接运行成功,但单独把.exe文件拉出来运行时出现问题,程序不能运行,弹犯错误框
原因:在对话框初始化函数里,即BOOL CPlayerofEasonDlg::OnInitDialog()函数里打开文件列表语句:file.Open(".\\list.txt",CFile::modeReadWrite|CFile::typeText);,注意,此处为可读写TXT文件,若Debug里 40、事先没有list.txt文件则不能创建。这会造成播放列表不能加载,有些人可能会问,加上CFile::modeCreate不就行了。经尝试后,程序初始时运行file.Open(".\\list.txt",CFile::modeReadWrite|CFile::typeText|CFile::modeCreate);不管之前在运行播放器时有没有点了保留按钮列表,加载后列表框一直为空。查看MSDN后发觉modeCreate意思是假如没有就创建,假如有则清零,为满足功效需要,故这里不加CFile::modeCreate。所以在有.exe文件目前目录下一定要有.list文件,不然就会如上图报错。
处理 41、方案:在有.exe文件目前目录下自己创建.list文件
6.2起初运行成功后需要对软件作美化,于是就想到加载皮肤。在VC编译后直接点实施,可运行成功,但在Debug下点击.exe文件后就报错。
原因:在编译后,VC直接找工程区根目录,我把报错框中所需要文件放在了该工程区根目录下,假如在Debug下直接点.exe文件运行时,.exe文件会在其目前目录下找,这么就使得找不到所需要文件而报错。
处理方案:在Debug文件夹里加上所需要文件
6.3播放器大致完成后需修改图标,不知怎么将一个图片格式文件转换为.ico文件并加载。
处理方案:经上网查阅后,下载了一个格式转换文件,能够 42、直接将图片转.ico文件。在ResourceView里找到Icon文件夹,删除原有图标文件,并引入.ico文件,再在属性中把ID改为刚才删除图标ID即可。
7.个人体会
经过这次课程设计实践我受益匪浅! 这次课设使我愈加清楚了解了编程思想和编程技巧,也认识到了各函数生命周期及对控件添加消息响应,什么时候该给控件添加组员变量,什么时候加组员变量是多于。一个MFC软件编写包含构思、设计、编写、调试等过程,当然,软件及编程风格也很关键。MFC程序设计是一门关键专业基础课程。它和数据结构,操作系统,数据库原理和软件工程等课程相互连通,经过对MFC中类直接关系分析能够对之前学C++语言 43、有更清楚认识,学号了部分其它课程对编写出一个好应用程序也是至关关键。课程设计是培养学生综合利用所学知识,发觉,提出,分析和处理实际问题,锻炼实践能力关键步骤,是对学生实际工作能力具体训练和考察过程,经过对此次课程设计制作全过程,使我对MFC有了更深入认识和了解。在不长时间里我明白了,不仅仅是要重视,而且要经过不停上机试验才能愈加好地学习这门语言。在课程设计过程中,我认识到我有很多不足得地方。首先是自己在敲代码速度上还有待提升,常常按错字母,但比起刚进入大课时还得看键盘找按键来,已经有了很大提升;再有对MFC部分标准库函数不太了解,对函数调用正确使用不够熟悉,还有对MFC中常常出现错误也不了解。 44、经过设计实践,使我在这多个方面认识有所提升。经过设计各个步骤,从中学到了很多,锻炼了自己系统设计能力,从系统需求到系统功效,到系统测试,到系统优化,有一个清楚思绪,这么对我们以后在工作中或学习中得到很好锻炼,为用VC++编辑软件奠定基础。当然,本汇报所采取处理问题方法并不是很完善,在以后学习、工作中,将继续研究并改善。
对于MFC程序模块不熟悉是课程设计中所碰到大问题。 MFC中有基于基础对话框,单文档,多重文档等模块,对部分模块偏向造成对于全部模块全部是似懂非懂,而且在编写程序时候相互混淆造成编写错误。 程序基础不扎实使得课程设计不够完美,编程效率低下,耗时较长。 以前对程序只是 45、看在眼里,动手时间并不多,这次程序设计对自己程序设计实践能力发出了巨大挑战,经过对程序设计发觉在自己以前基础功不扎实,造成很多代码全部打错,大小写不分。自己对MFC程序中多种函数和各个函数之间相互调用还不能很好掌握,不知道程序接口函数和参数值,只能查询资料慢慢了解。
经过此次课程设计后,从各方面证实了我多种能力全部有待提升,但这次课程设计也给了我成功果实,使用对可视化编程这门课产生了极大爱好,相信在以后日子里我会不停进步,从一个菜鸟最终变为一个大神。
8.参考文件
【1】 詹红霞 侯思颖 陶永红等编著 Visual c++程序设计教程 清华大学出版
社
【2】 王育坚 46、编著 Visual c++面向对象编程教程第二版 清华大学出版社
本科课程论文评分标准
班级
学号
姓名
论文题目
多媒体播放器系统实现
评阅点
评分标准(细则)
分值
给分
功效及算法
(40分)
正确实现本程序所需全部功效,算法设计正确合理且有一定创意
40分
实现所需功效,算法正确
30分
基础实现所需功效
15分
有显著重大错误
5分
无法实现程序功效
0分
界面和操作性
(20分)
界面美观、合理,可操作性强
20分
界面合理,可操作
15分
界面尚可,基础可操作
10分
可操作较差
5分
程序可读、可维护性
(15分)
程序可读性好、逻辑清楚,程序完整,可维护性好,
15分
程序可读、可维护
10分
基础可读可维护
5分
逻辑混乱、不可读
0分
论文质量
(25分)
论文规范,行文流畅,层次清楚
25分
论文书写基础规范,文理较通畅
20分
结构较合理,层次较清楚,基础符合要求
15分
结构混乱,文不对题目,或有显著剽窃现象
5分
总分
老师署名:






