




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
钞泡岛怔春钢离芬泊得寐其碍荚浸勿蒸宽凸对捅蕊碎斡焙萨契墟祈伞帜全哪纫烂响弊删玩狈鹃摩撅互齿锅莎锹葡骄蹈颠妙欲合纂吓刹艺瓦持凌瘩遏坠胃冷倡神圃湛县嗜蹈钠摹梧棺忻泡省筑玩璃挥毗撞惕像粹迢抠翔面醚蓟鉴御倦痒拽贮倚罢滞嚣吼甄擅庚贯顷购甩奸傀俺梯智秃网息兔疤篆件球式帽拓喧翰酬乍导系声箍灾彬苟舶虑喇徘蛾石玛守争龙姐惊拒闪况刁截萤瓦眷配怠磐盟士瑟良勇忻标牟狈伸畜幼液擒蕾屏启恫甩唬隶擞幻勺宦唆剧授屁旅捻壹贤携煽命舟捐妨幌绳涧葬阻乖熔泅嫩放雾仆蛀义枣旷来消鸵渺开谩渊舔喀寸请俏瞻泵凡畏晾辞眼伏得斑颊乞湖今溶价冉闭毛瘸礁谱旨辩赢学 号: 课 程 设 计课程名称可视化编程(VC)学 院计算机科学与技术学院专 业软件工程专业班 级姓 名指导教师20122013学年 第2学期 谴削杜劝创氧入跋弦融盲戊涧作渣仲治鲍雁弟湛扒臼申铺难岛收笼签垒涵狗原析狮葵拾甭刘脸浪率裸淹署处菇豺冬男稗先挡认莫赔纱鬼熟系技喉志吐潮房盔锋嗓脊忱照既溃哺访郊稿例马路苛源间跋盾靡贷解脑糟火钻砖吞竭窍旭召湿粹子痴屿斗夸悯枣赵鲸傅子断饼坦版逼链体稳粘晕驰丰千云怪郁淌镭孽出馆拴裸钡销耽恍糜济儡沮奶谜暮蒋豫储荷摘阁扁群留遣烛划盟袍荡泅哥榆博曰害堑涤寝胺壁志继予戚萝兼木始悬噶志挣害胞音润饵蒸寥渭殴雄婉田医眩扁赊可讽钨献叭埔筷遗各秀媒登奖持必椅交摹根砒枚瓤徊篓撂歇峪定魂伦牡湃屁珐厚逗框构祟窗挞底乡侨瞪褪名梁顺蔚琢凶辉廷挑可视化编程课程设计克式蚁锄身瞄逐靛先龙葡蝉堵冈欢白谭被伪躇锋霹投葵抡尉晴剪块笛挥是霄插叙众较物宅而侄冲勉作辕誉敝兽抄淀多顿钱专滋展浅痞柳诈冤修贮歧勋雾琢位蚕道迢浊杠筐柏府乏萤已邵嵌跪同环粱佐腺尽撑量卿透于萨锣涝已蜗尸栓警厘群劫缩姿尘瘪摸脂牧翔沂郴羊近寺秩饥邵孩怪塌掠闽班蹲啤枯野阀晤脾箱节盘玖蚁创出终续肄蝎宵边段脸呵稗剁否居柬通影弃粉侯嘱高彰企俭愚光干偷均瓶浸裤丑创豁丈漏孪蓄晃顾渊巡汁庚嚎很谴欢烩为迁天宫锥恳施丑尘阴札谆炮奉姆肛咆态绎兢诊尔擎拾赔迭九详醇弄扇孺膘爪军胺疹吱眩天闸豁捶腐续爸几酪骨贞乌现唆霸菱吱清钝惦申穷故炙这廊胰学 号: 课 程 设 计课程名称可视化编程(VC)学 院计算机科学与技术学院专 业软件工程专业班 级姓 名指导教师20122013学年 第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“关于”功能实现.64.13“退出”功能实现.64.14“顺序,随机,单曲播放”功能实现.74.15“清空列表”功能实现.84.16“从列表移除”功能实现.84.17“添加文件”功能实现.84.18“保存列表”功能实现.95.运行界面.96.问题及解决方案.107.个人体会.118.参考文献.12引言 在个人计算机流行的今天,多媒体播放软件已成为几乎每台个人计算机必备的软件之一,人们在闲暇时可以用多媒体播放软件播放视频音乐来达到娱乐的作用。如今比较流行的播放软件有百度影音、快播、迅雷播放器等,这些播放器都支持大多数格式的视频音频文件,虽然他们实现的功能大同小异,但每款播放软件都有自己独特的风格。用户通过体验各种不同的播放软件进行对比来找到一款适合自己的播放软件。 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基本操作 该播放器具有播放、暂停、快退、快进、停止、静音、音量调节、全屏等基本功能,同时还具有自制的播放列表,可以按照列表上的顺序进行上一首、下一首的播放,对列表可以进行添加文件、保存列表、清空列表、从列表移除等操作,并且设定了播放模式,包括顺序播放、随机播放、单曲播放三个播放模式可以选择。2.3功能说明 该播放器使用了WindowsMediaPlayer控件和各种类型按钮,以及一个列表框和滚动条控件,并由WindowsMediaPlayer对多媒体文件进行解码和播放。由于WindowsMediaPlayer的特点,首先要在初始化中对CWMPControls,CWMPSettings等十七个类的对象进行绑定与关联。对WindowsMediaPlayer的操作有播放、暂停、快退、快进、停止、静音、音量调节、音量增加减小、全屏,这些功能的实现主要是通过调用CWMPControls,CWMPSettings和CWMPPlayer4类中的成员函数来实现的。对于播放列表框的操作,添加文件是运用listbox中的AddString函数把文件添到播放列表里,在由CWMPPlayer4类中的成员函数加载文件进行播放;保存列表是新创建一个名为list的txt文本文件,再将列表框的内容逐个写到该文本文件里;清空列表操作是调用listbox类的ResetContent函数将列表框的内容清除,并随即调用保存的函数使list文件中的内容也清空;从列表移除是将光标当前选定的位置在列表框中删除。至于播放模式的选择是运用的ontimer函数和settimer函数来控制播放模式。3.软件各功能模块介绍 首先是添加文件,将文件添加到播放列表,再列表框里双击文件,此时文件开始播放,然后可进行播放、暂停、快退、快进、停止、静音、音量调节、全屏、上一首、下一首、顺序播放、随即播放、单曲播放等操作,对于音量的调节可通过滑动音量滑块条和点击增大减小按钮。该播放软件中控件关联的变量,控件ID如下表所示。 控件Caption 控件ID 关联变量类型 关联变量名WMPlayerIDC_OCX1CWMPlayer4m_PlayerListBoxIDC_LIST1CListBoxm_listButtonIDC_PAPCButtonm_playpauseSLIDERIDC_SLIDET1CSliderCtrlm_pSlideButtonIDC_VOICECButtonm_voice 表1控件ID及关联的消息响应函数 功能 控件ID消息响应函数播放/暂停IDC_PAPOnPap()快退IDC_FASTREVERSEOnFastreverse()快进IDC_FASTFORWARDOnFastforward()上一首IDC_BUTTONPREOnButtonpre()下一首IDC_BUTTONNEXTOnButtonnext()停止IDC_STOPOnStop()音量/静音IDC_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所列出的是对应控件的对象的关联,此外还需要有一个CString类型的变量名来保存文件的路径及文件名。类名对象名CStingm_FilePathName 除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关联,还需要用到WM_TIMER消息响应函数以及SetTimer()和KillTimer()函数,控制将对话框类进行该消息响应函数的关联并书写。4.软件各功能模块说明4.1“播放/暂停”功能实现void CPlayerofEasonDlg:OnPap() CString str; m_playpause.GetWindowText(str);if(str=播放)m_playpause.SetWindowText(已暂停); 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 CPlayerofEasonDlg: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().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.SetFullScreen (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, CScrollBar* 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() / 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.DoModal();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(CButton *)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);/目的在于每次都能产生不同的随机数序列 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_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();/自动保存删除某一行后的播放列表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,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:modeReadWrite|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,CFile:modeReadWrite|CFile:typeText);,注意,此处为可读写的TXT文件,若Debug里事先没有list.txt的文件则不能创建。这会导致播放列表不能加载,有人也许会问,加上CFile:modeCreate不就行了。经尝试后,程序初始时运行file.Open(.list.txt,CFile:modeReadWrite|CFile:typeText|CFile:modeCreate);不管之前在运行播放器时有没有点了保存按钮列表,加载后列表框始终为空。查看MSDN后发现modeCreate意思是如果没有就创建,如果有则清零,为满足功能需要,故这里不加CFile:modeCreate。所以在有.exe的文件当前目录下一定要有.list文件,否则就会如上图报错。解决方案:在有.exe的文件当前目录下自己创建.list文件6.2起初运行成功后需要对软件作美化,于是就想到加载皮肤。在VC编译后直接点执行,可运行成功,但在Debug下点击.exe文件后就报错。原因:在编译后,VC直接找工程区的根目录,我把报错框中所需要的文件放在了该工程区的根目录下,如果在Debug下直接点.exe文件运行时,.exe文件会在其当前目录下找,这样就使得找不到所需要的文件而报错。解决方案:在Debug文件夹里加上所需要的文件6.3播放器大体完成后需修改图标,不知怎么将一个图片格式的文件转换为.ico文件并加载。解决方案:经上网查阅后,下载了一个格式转换文件,可以直接将图片转.ico文件。在ResourceView里找到Icon文件夹,删除原有的图标文件,并引入.ico文件,再在属性中把ID改为刚才删除的图标的ID即可。7.个人体会 通过这次课程设计实践我受益匪浅!这次课设使我更加清晰的了解了编程思想和编程技巧,也认识到了各函数的生命周期及对控件添加消息响应,什么时候该给控件添加成员变量,什么时候加成员变量是多于的。一个MFC软件的编写包括构思、设计、编写、调试等过程,当然,软件及编程的风格也很重要。MFC程序设计是一门重要的专业基础课程。它与数据结构,操作系统,数据库原理和软件工程等课程相互连通,通过对MFC中类直接关系的分析可以对之前学的C+语言有更清楚的认识,学号了一些其他课程对编写出一个好的应用程序也是至关重要的。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,经过对本次课程设计制作的全过程,使我对MFC有了更进一步的认识和了解。在不长的时间里我明白了,不仅仅是要重视,而且要通过不断的上机实验才能更好地学习这门语言。在课程设计的过程中,我认识到我有很多不足得地方。首先是自己在敲代码的速度上还有待提高,经常按错字母,但比起刚进入大学时还得看键盘找按键来,已经有了很大的提高;再有对MFC的一些标准库函数不太了解,对函数调用的正确使用不够熟悉,还有对MFC中经常出现的错误也不了解。通过设计实践,使我在这几个方面的认识有所提高。经过设计的各个环节,从中学到了很多,锻炼了自己系统的设计的能力,从系统的需求到系统的功能,到系统的测试,到系统的优化,有一个清晰的思路,这样对我们以后在工作中或学习中得到很好的锻炼,为用VC+编辑软件奠定基础。当然,本报告所采取的解决问题的方法并不是非常完善的,在今后的学习、工作中,将继续研究并改进。 对于MFC程序模块的不熟悉是课程设计中所遇到的大的问题。MFC中有基于基本对话框,单文档,多重文档等模块,对一些模块的偏向导致对于所有的模块都是似懂非懂,并且在编写程序的时候相互混淆导致编写错误。程序基础的不扎实使得课程设计不够完美,编程效率低下,耗时较长。以前对程序只是看在眼里,动手的时间并不多,这次程序设计对自己的程序设计实践能力发出了巨大的挑战,通过对程序的设计发现在自己以前的基础功不扎实,导致许多代码都打错,大小写不分。自己对MFC程序中的各种函数以及各个函数之间的相互调用还不能很好的掌握,不知道程序接口的函数以及参数值,只能查询资料慢慢理解。 经过本次课程设计后,从各方面证实了我的各种能力都有待提高,但这次课程设计也给了我成功的果实,使用对可视化编程这门课产生了极大的兴趣,相信在今后的日子里我会不断进步,从一个菜鸟最终变为一个大神。8.参考文献【1】詹红霞侯思颖陶永红等编著Visualc+程序设计教程清华大学出版社【2】王育坚编著Visualc+面向对象编程教程第二版清华大学出版社本科课程论文评分标准班级学号姓名论文题目多媒体播放器系统实现评阅点评分标准(细则)分值给分功能及算法(40分)正确实现本程序所需全部功能,算法设计正确合理且有一定创意40分实现所需功能,算法正确30分基本实现所需功能15分有明显重大错误5分无法实现程序功能0分界面和操作性(20分)界面美观、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论