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