




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计设计报告题 目: 可换肤MP3播放器的设计与实现 学 号: 20085912 姓 名: 王金胜 学 院: 信息科学与技术学院 专业班级: 软计08级3班 指导教师: 黄文培 设计时间: 2010-01-15 指导老师评语: 评定成绩: 签名: 日期:47 基于VC+ MP3设计与实现 第47页 共47页目录1概述41.1课程设计目的:41.2 设计任务与要求:51.3 开发环境:62 系统设计的基本概念与原理61.1基本概念与知识8MFC简介8关于MCI8系统实现的基本原理及过程:93系统的总体设计与分析103.1 MP3播放器需求分析10需求矩阵113.2功能模块图:113.3系统设计实现的基本原理与过程134 系统详细设计与实现154.1 创建新工程154.2 设置控件模块154.3 界面布局设计164.4 动态链接库184.5 添加图片184.6 各模块功能设计194.6.1 处理“打开”按钮194.6.2 处理“播放”按钮244.6.3 处理“暂停”按钮274.6.4 处理“停止”按钮284.6.5 处理“退出”按钮284.7程序中的主要类和函数285系统的调试与运行345.1 测试方法345.2 测试过程345.3 测试结论356 课程设计总结36参考文献37附录 部分程序代码38 1概述摘 要 多媒体技术的概念和应用出现于20世纪80年代初期,经过十余年的发展,随着计算机科学网络的普及和多媒体技术的发展,已成为计算机领域发展的热点技术,针对目前各种媒体格式,如何简单方便的播放各类媒体已成为人们普遍关注的问题,而媒体播放器的开发也变得十分重要。本课程设计就是基于面向对象的, 利用vc+6.0开发出适合AVI的多媒体播放器。该播放器是基于MFC集成开发环境,利用系统的MCI(media controller interface)命令接口来编程,具有体积小,支持的播放格式多、系统资源占用少、支持播放列表编辑等功能优势。另,本课程设计还用到了在对话框中加入连接到Internet的方法。关键词 程序设计;MCI;C+;音乐播放器;超级链接 1.1课程设计目的:本课程设计通过对Windows API的多媒体和资源文件的高层控制MCI进行封装,建立了一个MP3播放器的类CPlayerDlg,使得我们不必研究MCI的内部函数,轻松调用CPlayerDlg类的函数,就能实现播放WAV、MID、MP3等Windows音频格式的文件。1、通过本次课程设计,熟练掌握一种开发语言(Java或C+、C#)和开发环境Eclipse或.NET。开发语言的熟练需要通过编写一定长度的代码(10002000行代码)才能达到,开发环境的熟练需要反复的程序调试训练。2、加深对软件工程的理解,训练编写程序的良好习惯。包括:认真编写需求分析文档、做好系统功能设计、学会自己进行程序的算法、数据结构设计、3、培养良好的程序设计风格(模块划分、接口设计、函数和变量命名规则)和习惯(程序备份、版本更新与控制),提高软件测试、调试的能力与技巧。通过本次课程设计,应该达到具有独立完成小型应用设计的能力,具备编写较为规范的软件设计文档的能力。1.2 设计任务与要求:MP3媒体播放器软件是采用MFC设计的Windows应用程序,在MFC的集成环境下填加文档/视图结构。这种程序框架和简单应用程序之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要三个类对象:1框架窗口类对象,2视图类对象,3文档类对象。1、2、3组成应用程序的界面。在加入MP3的解码使程序界面有播放MP3的功能。MP3媒体播放应用程序是用Windows Media Player的界面插件,并且应用Media Player的解码功能,使应用程序能够界面清析、播放格式增加并且操作简单。本课程设计将实现目前Winamp播放器所具有的多数基本功能,并提供一些额外的辅助功能。具体而言,其实现的功能和技术服务包括以下几个方面:(1)高层的音频服务。(2)媒体控制接口。(3)连接多媒体设备,并自动判断设备类型。(4)API函数mciSendCommand()。(5)打开和关闭指定的音频文件。(6)实现复读机功能。(7)播放视频格式文件。(8)出错情形说明。(9)程序托盘管理。(10)超级链接类的使用。1.3 开发环境:列出开发工具、程序运行的支持环境(操作系统、数据库等)。操作系统:Windows XP 简体中文版开发平台:Visual studio 6.0简体中文版开发平台介绍:Visual C+ 6.0。它是微软公司推出的开发Win32应用程序(Windows 95/98/2000/XP/NT),面向对象的可视化集成工具。它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C+类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。MFC (Microsoft Foundation Class ) 是用来编写Windows 应用程序的C + 类集,其中封装了分之所以Windows API 函数和Windows 控件,使用MFC 类库和Visual C + 提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。随着多媒体性能的极大提升,程序中经常要播放一段视频或者一段音频,如果能够简单地插入音频和视频,将极大缩短程序的开发时间。本文基于MFC 在Visual C + 环境下利用Windows Media Player 控件实现了音频视频文件的播放。Visual C+作为开发工具,不仅仅因为曾经有过使用它的经验,看中的更是它的功能强大和使用方便。它本身不仅具有极其强大的编程能力,它允许选择和管理外接程序,并内含多种实用控件,这些对Visual C+的扩充又进一步增强了它的开发环境的能力。 1.4 可行性分析和需求分析l 经济可行性由于该软件属于个人开发,无需过大的资金投入.所以经济上是可行的。l 技术可行性VC+6.0中文版作为一个关系型数据库系统,它提供了面向对象的编程技术,可简化数据库管理,使开发应用程序这艰辛的工作就象堆木那样简单方便.另外, VC+6.0中文版开发的应用程序可以独立运行于WINDOWS平台. VC+6.0中文版,它是运行于W indows95/98和Window XP平台32位数据库系统,充分发挥了32位微处理器强大的32位数据处理性能.它功能强大,直观易用,支持客户/服务器结构和面向对象编程,提供多种可视化编程工具,支持最新Internet技术,WWW数据库的设计,最新流行的ActiveX 等。 VC+6.0中文版完全支持OOP(面向对象)的应用程序设计方法,VC+6.0使用了真正的类,包括继承性,封装性和多态性,用可视方式创建类,查看类及类代码;利用表单向导进行专业级界面设计;对表关系进行可视化查看;可利用OLE自动化来包含其他软件(如Excel, word)中的对象并使用这些软件。通过VC+6.0对象和事件模型,用户可以快速创建和实现无模式(Modeless)的应用程序;利用生成器和工具栏,开发人员可以快速开发应用程序,而省去编写大量的代码、定义繁多的属性。总之,VC+6.0中文版是一种适用于专业人员的开发工具。l 人员可行性我目前时间充足,可以完成开发任务。 而且C+语言和算法的功底还行,可以参与系统的算法设计与开发。我都有有深厚的文字功底,可以参与用户文档的制作、内部文档整理、后期测试等任务。1.5软件的开发设计思想本系统开发设计思想:l 尽量利用人们现有的软件环境,采用简单快捷的设计方案,从而达到使用方便,容易操作的目的;l 此播放器可以满足大多数人日常使用的需要,并达到操作过程的直观、方便、实用、安全等要求;l 软件采用模块化程序设计方法,既便于软件功能的各种组合和修改,又便于技术维护人员进行补充、维护。2 系统设计的基本概念与原理1.1基本概念与知识MP3播放器的设计是利用MFC应用程序、媒体控制接口MIC的基本知识而设计的。MFC简介MFC是Visual C+是核心。MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用1。关于MCIWindows已经提供了一个关于多媒体处理的动态链接库WINMM.DLL,通过调用它所提供的API函数,就可以使用MCI指令进行多媒体方面的操作了。 MCI的全称是Media Control Interface(媒体控制接口),为各种多媒体设备,包括音频视频交错(AVI)重放、动画播放机、VCD、CD播放器以及声卡上的波形音频和合成器系统,提供了一个公共的接口。用MCI函数可以给上述的任何一种设备发出命令,告诉它们开始、结束、暂停、倒退、快进等就像按动MP3播放器面板上的按钮一样。每一个设备的特殊命令依赖于设备本身的功能。实际上MCI是一个高级的函数调用接口,可以把它看作揖个解释器,通过它,就可以直接和外部音频或视频设备打交道了。 必须注意的是,在MCI工作过程中,需要在指令中调用API函数,这样才能实现应用设备与多媒体设备连接。有3个与MCI有关的API,即mciSendString()、mciExecute()和mciGetErrorString()。mciSendString函数的功能是传送指令字符串给MCI;mciExecute的功能和mciSendString一样,不同的是当发生错误时mciExecute会弹出对话框显示错误信息;mciGetErrorString的功能是将MCI错误代码转换为字符串。在系统实现的基本原理及过程:本课程设计中,将会说明如何用MCI和API函数编程实现播放Windows支持的各种音频文件。MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。它所支持的媒体格式包括avi、wav、mpeg等等2。音频技术发展较早,几年前一些技术已经成熟并产品化,音频技术主要包括四个方面:音频数字化、语音处理、语音合成及语音识别。音频文件包括多种格式的文件,MP3就是其中的一种。MP3的全称是Moving Picture Experts Group,Audio Layer ,它所使用的技术是在VCD(MPEG-1)的音频压缩技术上发展出的第三代,而不是MPEG-3。MP3是一种音频压缩的国际技术标准,它一般需要MP3播放器来读取。首先确定要解决的问题是弄清楚MCI函数与命令消息的名称类型和功能;其次是通过分析媒体播放的具体过程,在打开媒体设备的过程中应用程序需要做哪些事情,以便在应用程序中加入对这些过程支持的代码;在对应用程序的流程有了大致的轮廓以后,再开始考虑程序框架和应用程序外观的设计.最后,也是最关键的就是编写实现播放器的代码将播放器的基本功能实现,紧接着就是程序的调试和完善。3系统的总体设计与分析3.1 MP3播放器需求分析本章主要讨论了系统的需求分析,从用户角度分析系统整体要实现的功能及要完成的任务,并细化所有功能点.作为MP3 播放器系统,它应该包含以下功能:实现基本的播放、暂停、停止功能;能实现快进快退以及显示播放列表等功能。同时本文还要求需要实现换肤功能。具体目标如下:1) 能够方便地选择本机上的一个mp3文件进行播放。选择mp3文件时,不需要有键盘输入操作。2) 播放过程中可以暂停,暂停后可以从暂停处再次播放。播放过程中可以停止,按下播放按钮后,可以再次从开头播放本文件。本程序提供“快进”、“快退”按钮,播放和暂停状态都可以快进快退,并保持当前状态不变。3) 播放、暂停、或停止状态中,都可以选择其它mp3文件代替当前mp3文件进行播放。4) 本程序中要有一个滚动条来显示当前的mp3文件播放位置,拖动滚动条,可以调节mp3文件的播放位置。5) 在面板上显示mp3文件当前播放的时间。播放时间随时刷新,配合好前面的播放调节操作。7)本程序中要有一个面板来显示列表,并且拥有删除、添加文件等功能。8)本程序中要可以更换皮肤。9) 提供“帮助”,“关于”等菜单按钮。退出按钮要绝对有效,能够完美地结束整个程序,不在内存中留下垃圾。10) 界面尽量美观,程序运行时不要出现异常。本章主要讨论了系统的需求分析,从用户角度分析系统整体要实现的功能及要完成的任务,并细化所有功能点,为每一功能但定义“需求描述”、“输入输出”。同时为方便后期设计、编码和测试。需求矩阵表 3-1 需求矩阵表需求功能需求描述播放状态显示1、用户界面能显示正在被播放歌曲的进度,显示歌曲的播放状态;2、用户能够显示正在被播放歌曲的音量;3、显示被播放歌曲的歌名。播放控制1、用户能够控制正在被播放歌曲的进度,能够控制歌曲停止、暂停与播放;2、用户能够调节正在被播放歌曲的音量;3、用户能够切换上一首和下一首歌曲列表中歌曲管理1、在歌曲列表中能够添加用户所需要的歌曲文件的文件名,并长期保存在该列表中直到用户删除该列表中的歌曲名。核心播放控制1、完成歌曲播放最核心的部分,能够将打开MP3文件,并将其解码,然后启动音频硬件播放歌曲。3.2功能模块图: 总体设计模块其中输入模块里面有负责打开文件的功能,供用户选择文件,处理模块负责多媒体文件的音量大小的调节,调大.调小和静音功能,还有对播放文件的播放, 暂停,快进快退,停止等必备功能,输出模块负责在显示屏显示文件!MP3播放器打开文件播放歌曲暂停播放停止播放列表控制 系统功能模块图 3.3系统设计实现的基本原理与过程图形界面mp3播放器。根据常识来看,打开软件后,会出现图形界面,然后点击图形界面,选择mp3文件,点击开始,即可播放了。程序规划流程图如图3-3所示:程序开始执行用QT创建用户界面和按钮、菜单等控件响应用户退出程序的要求,清理、退出为按钮、菜单、等控件注册信号等待信号发生并处理 图3-3 程序规划流程图无论在什么平台下,无论用什么开发工具,GUI应用程序的基本开发方法都是相似的。开发人员都要编写两方面的代码,即应用于实现图形界面的代码和用于实现程序运行的代码,然后再将这两部分的代码结合起来,本程序也不例外。4 系统详细设计与实现4.1 创建新工程 用MFC AppWizard(exe)创建一个新工程,命名为MailServer(如下图3-1所示) (1)在MFC AppWizard中按照下列步骤设置工程的属性: a设置应用程序类型为Dialog Based模式。b其他步均为默认设置。 图4-1用MFC AppWizard(exe)创建一个新工程4.2 设置控件模块 单击ResourceView面板,选择Dialog选项,添加一个新的对话框,命名为IDD_IDD_PLAYER_DIALOG,该对话框隶属于类CPlayerDlg.设置Push Boutton控件的Styles为“ownersdraw”,调整各控件的大小和相对位置如下图3-2所示。 图4-2 各控件的设置和大小调整4.3 界面布局设计系统界面的运行结果图如下图所示。程序编写完毕,编译、运行,用户即可看到一个美观大方的简单MP3播放器。当程序运行时,Mp3播放起将会实现其播放功能,它能实现播放WAV、MID、MP3、VCD、AVI、CD、MPEG等全部Windows音频格式的文件,运行界面。 系统总体结构图 4-3 软件系统总体设计图根据系统总体结构设计划分系统子结构,并定义每一子系统的“功能描述”、“界面设计”、“数据说明”及“处理流程”等。该概要设计主要为后期的详细设计及编码提供参考。功能描述1. 完成音频文件的读取。2. 能够打开音频设备,播放相应的音频文件的内容。3. 能够根据控制命令控制音频文件列表的播放顺序。4. 能够根据控制命令控制音频设备的音量大小。实验最终的效果图预览如图4-4: 图4-4 程序实现播放MP3的界面4.4 动态链接库 单击Project菜单中的Setting.命令,打开Project Setting对话框,单击Link选项卡,在Object/library modules中加入winmm.lib。如图4-5所示。 图4-5 加入多媒体处理的动态链接库4.5 添加图片 添加主对话框和各个控件的图片。本课程设计具有美观大方的界面。界面的实现是通过编程将不同的Bitmap图片覆盖到对应的主对话框及控件上。因此,需要在Resouce资源中添加Bitmap图片。单击Resouce View面板,右击Player Resources项,在弹出的菜单中选择Insert,添加Bitmap内容。右击Bitmap,在弹出的菜单中选择Insert,向工程中添加与控件相对应的图标。Mp3Player对话框中所用控件的属性描述如表所示。控件ID描述IDC_STATIC_INFO_WNDGroup Box控件,用来显示“信息窗口”IDC_STATIC_INFOStatic Text控件,用来显示各种信息IDC_STATIC_OPERATIONGroup Box控件,用来显示“操作面板”IDC_BUTTON_OPEN按钮控件,单击它用来选择歌曲IDC_BUTTON_PLAY按钮控件,单击它用来播放歌曲IDC_BUTTON_PAUSE按钮控件,单击它用来暂停播放歌曲IDC_BUTTON_STOP按钮控件,单击它用来停止播放歌曲IDC_BUTTON_VOLUME按钮控件,单击它用来设定音量IDC_BUTTON_QUIT按钮控件,单击它用来退出程序4.6 各模块功能设计4.6.1 处理“打开”按钮单击“打开”按钮后,在OnButtonOpen()函数中,首先对文件类型进行过滤,调用DoModa()函数打开对话框选择一个媒体文件,通过GetPathName()函数获取文件路径,通过GetFileName()函数获取文件名后,调用DisplayInfo()函数在Static Text控件上显示“你选择的歌曲是(文件名)”,然后利用GetDlgItem()函数设置“暂停”按钮以及“停止”按钮不可用。先点击打开按钮,弹出如图4-6-1对话框: 图 4-6-1void CActiveMovie3:OnOpen() char szFileFilter=Mp3 File(*.mp3)|*.mp3|Wma File(*.wma)|*.wma|Video File(*.dat)|*.dat|Wave File(*.wav)|*.wav|AVI File(*.avi)|*.avi|Movie File(*.mov)|*.mov|Media File(*.mmm)|*.mmm|Mid File(*.mid;*,rmi)|*.mid;*.rmi|MPEG File(*.mpeg)|*.mpeg|All File(*.*)|*.*|;/文件类型过滤CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()=IDOK)CString PathName=dlg.GetPathName();PathName.MakeUpper();m_ActiveMovie.SetFileName(PathName); 打开文件以及对文件的处理之类的函数控制#if !defined(AFX_PLAYERDLG_H_FE3B843D_BE0F_46C6_9038_4AA6AA8032A8_INCLUDED_)#define AFX_PLAYERDLG_H_FE3B843D_BE0F_46C6_9038_4AA6AA8032A8_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000/ CPlayerDlg dialog#includemmsystem.hclass CPlayerDlg : public CDialog/ Constructionpublic:int hour,minute,second;/时间变量:小时、分钟、秒钟 DWORD cdlen;/某个音频文件的总时间长度DWORD m_count;/设备型号void Tplay();void Thide();void Tdehide();void forfor();void forfor1();DWORD getinfo(DWORD item);CString aa;/当前播放文件的路径CString file255;/存放所有待播放文件路径名的字符串数组CString file1255;/存放所有待播放文件路径名的字符串数组1int fi,fr;/歌曲文件列表中,当前歌曲所在位置及最后一首歌曲所在的位置DWORD cdfrom,cdto; /歌曲的起点和终点CBitmapButton m_bexit;CBitmapButton m_bmim;CBitmapButton m_bhelp;CBitmapButton m_play;CBitmapButton m_stop;CBitmapButton m_open;CBitmapButton m_rp;CBitmapButton m_pop;CBitmapButtonm_next;CBitmapButtonm_sdel;CBitmapButtonm_per;CBitmap m_bg,m_bg1;BOOL m_flag,m_flag1,m_flag2,m_flag3;/各个控件的状态标志CPlayerDlg(CWnd* pParent = NULL);/ standard constructor对播放器的整体结构进行模块的总体设计/ CAboutDlg dialog used for App About /进行程序主界面的初始化,并向控件中添加Bitmap图 BOOL CPlayerDlg:OnInitDialog() . SetWindowText(MCI播放器); /程序主界面在屏幕中的位置,及主界面的大小 MoveWindow(200,200,303,103); /加载程序背景图片 m_bg.LoadBitmap(IDB_BITMAPBG); /以下部分是在控件上加载图片 m_play.LoadBitmaps(IDB_BITMAPPLAY1,IDB_BITMAPPLAY3); m_stop.LoadBitmaps(IDB_BITMAPSTOP1,IDB_BITMAPSTOP3); m_open.LoadBitmaps(IDB_BITMAPOPEN1,IDB_BITMAPOPEN3); m_bhelp.LoadBitmaps(IDB_BITMAPHELP1,IDB_BITMAPHELP2); m_bmim.LoadBitmaps(IDB_BITMAPMIM1,IDB_BITMAPMIM2); m_bexit.LoadBitmaps(IDB_BITMAPEXIT1,IDB_BITMAPEXIT2); m_rp.LoadBitmaps(IDB_BITMAPRP1,IDB_BITMAPRP2); m_pop.LoadBitmaps(IDB_BITMAPC,IDB_BITMAPD); m_pop.LoadBitmaps(IDB_BITMAPA,IDB_BITMAPB); m_per.LoadBitmaps(IDB_BITMAPPER1,IDB_BITMAPPER2); m_next.LoadBitmaps(IDB_BITMAPNEXT1,IDB_BITMAPNEXT2); m_sdel.LoadBitmaps(IDB_BITMAPDEL1,IDB_BITMAPDEL2); . /在程序的主界面上显示控件 void CPlayerDlg:OnPaint() if (IsIconic()/ 判断是否为程序的主界面 /以下部分有Visual C+自动生成CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);else /画笔工作区CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem; dcMem.CreateCompatibleDC(&dc); BITMAP bitMap;m_bg.GetBitmap(&bitMap);CBitmap *pbmpOld=dcMem.SelectObject(&m_bg); dc.StretchBlt(0,0,502,rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);/利用位图填充应用程序的界面 /添加控件,设定主界面上控件的位置和大小 m_bexit.MoveWindow(284,0,19,19,false);m_bmim.MoveWindow(263,0,19,19,false);m_bhelp.MoveWindow(242,0,19,19,false);m_play.MoveWindow(13,60,40,40,false);m_stop.MoveWindow(55,68,30,30,false);m_open.MoveWindow(93,65,30,30,false);m_rp.MoveWindow(133,68,30,30,false);m_pop.MoveWindow(282,22,20,78,false);m_per.MoveWindow(170,60,40,40,false);m_next.MoveWindow(200,60,40,40,false);m_sdel.MoveWindow(484,30,18,40,false); CPlayerDlg:CPlayerDlg(CWnd* pParent /*=NULL*/): CDialog(CPlayerDlg:IDD, pParent) . (10) 实现弹出关于对话框的功能void CActiveMovie3:About() CAboutDlg aboutDlg; /定义变量 aboutDlg.DoModal(); /弹出关于对话框4.6.2 处理“播放”按钮单击“播放”按钮后,在OnButtonPlay()函数中,通过调用MCIMP3类的MCIOpen()函数获取刚才选择的文件路径以及文件名,调用该类的MCIPlay()函数播放歌曲,此时调用DisplayInfo()函数在Static Text控件上显示“正在播放的歌曲是(文件名)”,进行歌曲的播放,然后利用GetDlgItem()函数设置“播放”按钮不可用。(1) 为了循环播放,我们利用定时器来工作,采用OnTimer()函数来激活定时器:void CActiveMovie3:OnTimer(UINT nIDEvent)CString m_filename; /定义文件变量double CurPos=m_ActiveMovie.GetCurrentPosition(); /获得播放位置if(CurPos= = 0)m_list.SetCurSel(0); /选择列表框的第一个文件m_list.GetText(0,m_filename);m_ActiveMovie.SetAutoStart(1); /设置自动播放m_ActiveMovie.SetFileName(m_filename); /设置文件m_ActiveMovie.Run(); /播放m_list.GetCurSel(); /获得播放文件m_list.InsertString(-1,m_filename); /插入列表框最后m_list.DeleteString(0); /删除用过的文件CDialog:OnTimer(nIDEvent);(3)循环控制函数oid CMediaPlayerDlg:OnRepeat() /循环控制函数,实现对循环的控制功能 if(!isRepeat) /判断是否正在循环 SetTimer(1,2000,NULL); /设置循环的标志为1,循环间隔为2秒 isRepeat=TRUE; /将循环变量设为TURE SetDlgItemText(IDC_STATIC2,模式:循环); /将静态文本显示为循环模式 else KillTimer(1); /停止标志为1的循环 isRepeat=FALSE; /将循环变量设为FALSE SetDlgItemText(IDC_STATIC2,模式:普通); /将静态文本显示为普通模式 (4)全屏播放功能调用了m_ActiveMovie.SetMovieWindowSize函数,代码如下:void CActiveMovie3:OnFulscreeen() /全屏函数,实现全屏播放视频的功能m_ActiveMovie.Pause(); /暂停播放m_ActiveMovie.SetFullScreenMode(true); /设置全屏播放属性为真,即开启全屏播放m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED); /设置播放窗口大小为最大m_ActiveMovie.Run(); /继续播放(5)查询歌曲代码如下:void CActiveMovie3:OnChaxun() CSongSet cSet; UpdateData(); m_Edit1.TrimLeft(); if(m_Edit1.IsEmpty() MessageBox(要查询的歌曲不能为空!); return; CSongDlg dlg; cSet.m_strFilter.Format(歌曲名称=%s,m_Edit1); cSet.Open(); if(!cSet.IsEOF()/如果打开的记录集有记录 CSongDlg dlg; dlg.m_Gequ =cSet.m_GeQu; dlg.m_Geshou =cSet.m_GeShou; dlg.m_Zuoci =cSet.m_ZuoCi; dlg.m_Zuoqu =cSet.m_ZuoQu; dlg.m_Zhuanji =cSet.m_ZhuanJi; dlg.DoModal(); UpdateData(FALSE);/自动更新表单中控件显示的内容 else MessageBox(没有查到你要找的歌曲记录!); if(cSet.IsOpen()cSet.Close();(6)添加歌曲 void CActiveMovie3:OnTianjia() / TODO: Add your control notification handler code here CSongDlg dlg; CSongSet pSet; if(dlg.DoModal()=IDOK) pSet.Open(); pSet.AddNew(); pSet.m_GeQu =dlg.m_Gequ; pSet.m_GeShou =dlg.m_Geshou; pSet.m_ZhuanJi =dlg.m_Zhuanji; pSet.m_ZuoCi =dlg.m_Zuoci; pSet.m_ZuoQu =dlg.m_Zuoqu; pSet.Update(); pSet.Requery(); (6)循环控制函数void CActiveMovie3:OnRepeat() /循环控制函数,实现对循环的控制功能 if(!isRepeat) /判断是否正在循环 SetTimer(1,2000,NULL); /设置循环的标志为1,循环间隔为2秒 isRepeat=TRUE; /将循环变量设为TURESetDlgItemText(IDC_STATIC2,模式:循环); /将静态文本显示为循环模式 else KillTimer(1); /停止标志为1的循环 isRepeat=FALSE; /将循环变量设为FALSE SetDlgItemText(IDC_STATIC2,模式:普通); /将静态文本显示为普通模式 4.6.3 处理“暂停”按钮单击“暂停”按钮后,在OnButtonPause()函数中,首先通过调用MCIMP3类的MCIPause()函数暂停正在播放的歌曲,然后调用DisplayInfo()函数在Static Text控件上显示“暂停播放歌曲(文件名)”,此时的歌曲处于暂停时的进度上,利用GetDlgItem()函数设置“播放”按钮可用。 增加按钮 “播放” void CActiveMovie3:OnPlay() m_ActiveMovie.Run();/播放文件 SetTimer(0,20,NULL);/设置定时器 void CActiveMovie3:OnStop() m_ActiveMovie.Stop();/停止播放文件 KillTimer(0);/关掉定时器 4.6.4 处理“停止”按钮单击“停止”按钮后,在OnButtonStop()函数中,首先通过调用MCIMP3类的MCIPause()函数停止正在播放的歌曲,然后调用DisplayInfo()函数在Static Text控件上显示“停止播放歌曲(文件名)”,将停止正在播放歌曲,利用GetDlgItem()函数设置“暂停”按钮和“停止”按钮不可用。停止播放.暂停播放void CActiveMovie3:OnStop() /停止播放函数 KillTimer(1); /停止循环 m_ActiveMovie.Stop(); /停止播放void CActiveMovie3:OnPause() /暂停播放函数 m_ActiveMovie.Pause(); /调用控件的暂停函数暂停播放4.6.5 处理“退出”按钮单击“退出”按钮后,在OnButtonQuit()函数中,调用CDialog类的OnCancel()函数将退出对话框,结束程序的运行。4.7程序中的主要类和函数 单击Resource View面板,选择Dialog选项,添加一个新的对话框,命名为IDD_IDD_PLAYER_DIALOG,该对话框隶属于类CPlayerDlg。向新对话框中添加新的控件,各控件属性如表4-6所示。 表4-6 对话框IDD_PLAYER_DIALOG的控件 资源标识 类型 相关
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论