Windows下MP3播放器的设计与实现.doc_第1页
Windows下MP3播放器的设计与实现.doc_第2页
Windows下MP3播放器的设计与实现.doc_第3页
Windows下MP3播放器的设计与实现.doc_第4页
Windows下MP3播放器的设计与实现.doc_第5页
免费预览已结束,剩余51页可下载查看

Windows下MP3播放器的设计与实现.doc.doc 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南 京 工 程 学 院毕业设计说明书(论文)作 者: 学 号: 院 系: 计算机工程学院 专 业: 计算机科学与技术 题 目:Windows下MP3播放器的设计与实现 指导者: 评阅者: 2012 年 5月 南京毕业设计说明书(论文)中文摘要Windows下MP3播放器的设计与实现我所设计的MP3播放器是基于VC开发工具的媒体播放器软件。该软件实现的方法是通过调用MCI(media controller interface)控制接口的相关函数,进而对MP3播放器的每个操作进行控制。该软件实现的功能有:添加和删除音频文件;播放、暂停、停止音频文件;调节系统的音量的大小;可以显示当前播放的进度,并可通过拖放滑块实现快进和后退;可以隐藏或展开播放列表;在播放完一首歌后可以自动跳转到下一首歌,并实现整个列表的循环播放。关键词MP3播放器MCI播放列表音频VC+毕业设计说明书(论文)外文摘要Title Design and Implementation of the MP3 player in the WindowsAbstractThe MP3 player I have designed is a media player software which is based on VC + + development tools. The software implementation is a function call of MCI (media controller interface) control interface, and thus to control each operation of the MP3 player. The functions of this software: add and delete audio files; play, pause, stop the audio file; adjust the size of the system volume; can display the current progress of the play, and through drag and drop the slider to fast forward and rewind; can hide or expand the playlist; automatically jump to the next song finished playing a song, and the entire list of loop.Key wordsMP3 player, MCI, play list, audio, VC+目录目录iii第一章 绪论11.1 课题研究的目的和技术发展的现状11.2论文完成的主要工作与课题研究的难点所在2第二章 常见音频格式及播放方法42.1什么是音频?42.2常见音频格式42.3 常见播放器52.4 MCI命令接口编程6第三章 软件需求分析143.1需求分析143.2可行性研究14第四章 播放器软件的实现154.1程序设计的基本思想154.2程序设计的详细说明17第五章 总结285.1 软件设计结果285.2 软件评价29结 论31参 考 文 献32致 谢33附录:英文技术资料翻译34南京工程学院毕业设计说明书(论文)第一章 绪论多媒体技术的概念和应用出现于20世纪80年代初期,经过十余年的发展,随着计算机科学网络的普及和多媒体技术的发展,已成为计算机领域发展的热点技术,针对目前各种音频格式,如何简单方便的播放音频文件已成为人们普遍关注的问题,而MP3播放器的开发也变得十分重要。1.1 课题研究的目的和技术发展的现状1.1.1 研究本课题的目的随着技术的发展,音频的格式也在不断地增加,包括MP3,wav,wmv等,因此需要开发一个音乐播放器来实现各种音频的播放,同时也丰富了人们的娱乐生活,它使用方便,操作简单,功能强大、占用空间小,能够满足人们的各种基本需要。1.1.2 技术应用的基本现状Microsoft公司1998年推出了Visual C+60,它是支持Win32平台应用程序(application)、服务(service)和控件(control)开发的可视化编程的集成环境。与VC+50的最大不同之处是它的帮助功能更强大,MSDN(Microsoft Developer Networking)为包括VC+60在内的所有微软的程序产品提供在线帮助;另外,类的对象的可用成员函数、成员变量及函数的参数类型与个数都能动态显示在屏幕上,用户无须记住那些复杂而又枯燥乏味的函数名及复杂的参数,这无疑使得用VC+编程更加容易。所以VC60可谓是Microsoft公司的王牌产品,编程功能强大而赢得广大程序的偏爱。MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。它被设计用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的文件,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。用MP3形式存储的音乐就叫作MP3音乐。它能够将CD品质的数字录音压缩成极小的文件,并将其存储在电脑之中。实际上,可以将MP3文件压缩成比光盘文件小12倍的文件。因此大大节省了我们的硬盘空间。1.2论文完成的主要工作与课题研究的难点所在针对如上所述的研究方向,本课题“MP3播放器的设计”的主要任务是深入理解各种音频格式,并设计出较好的软件界面,开发出适用的MP3播放器软件。因此应解决的主要问题是如何把所学多媒体知识和VC+知识应用到实际编程当中去及设计出良好的用户界面。1.2.1论文完成的主要工作根据学习研究,本媒体播放器的开发基于VCMFC的对话框,利用Windows MCI(Media Control Interface)实现各类音频格式的播放及程序界面处理。首先确定要解决的问题是弄清楚MCI函数与命令消息的名称类型和功能;其次是通过分析音频播放的具体过程,在打开音频设备的过程中应用程序需要做哪些事情,以便在应用程序中加入对这些过程支持的代码;在对应用程序的流程有了大致的轮廓以后,在开始考虑程序框架的设计,应用程序外观的设计;最后也是最关键的就是编写实现播放音频的代码将播放器的基本功能实现,紧接着就是程序的调试和完善。1.2.2本课题的研究难点本课题的难点如下:1、 对于VC集成开发工具的熟练使用,特别是MFC的使用,重点放在界面设计;2、 各类音频设备的播放函数及相应的命令;3、 播放列表的生成及其操作;4、 实现音频播放中需要的各种基本功能。以上各点构成了本软件的难点,在克难过程中,我的分析问题解决问题的能力有了很大的进步,经过努力,一个占用空间小、简单实用的小型MP3播放器终于完成了。我设计的MP3播放器支持多种格式音频的播放,实现了对播放列表的控制,并实现了播放过程中的各种基本功能。第二章 常见音频格式及播放方法2.1什么是音频?2.1.1音频音频是个专业术语,人类能够听到的所有声音都称之为音频,它可能包括噪音等。音频定义为以下三种:Audio,指人说话的声音,常指300Hz-3400Hz的频带。指存储声音内容的文件。在某些方面能指作为波滤的振动。2.2常见音频格式首先,我们来明确一下数字音频的概念,它是指一个用来表示声音强弱的数据序列,由模拟声音经抽样、量化和编码后得到的。简单地说,数字音频的编码方式就是数字音频格式,我们所使用的不同的数字音频设备一般都对应着不同的音频文件格式。常见的数字音频格式有:2.2.1 WAV格式WAV格式是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音、视频格式,被Windows平台及其应用程序广泛支持。WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,因此WAV的音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播。2.2.2 MIDI格式MIDI是Musical Instrument Digital Interface的缩写,又称作乐器数字接口,是数字音乐/电子合成乐器的统一国际标准。它定义了计算机音乐程序、数字合成器及其它电子设备交换音乐信号的方式,规定了不同厂家的电子乐器与计算机连接的电缆和硬件及设备间数据传输的协议,可以模拟多种乐器的声音。MIDI文件就是MIDI格式的文件,在MIDI文件中存储的是一些指令。把这些指令发送给声卡,由声卡按照指令将声音合成出来。2.2.3 CD格式大家都很熟悉CD这种音乐格式了,扩展名CDA,其取样频率为44.1kHz,16位量化位数。CD存储采用了音轨的形式,又叫“红皮书”格式,记录的是波形流,是一种近似无损的格式。2.2.4 MP3格式MP3全称是MPEG-1 Audio Layer 3,它在1992年合并至MPEG规范中。MP3能够以高音质、低采样率对数字音、视频文件进行压缩。换句话说,音频文件(主要是大型文件,比如WAV文件)能够在音质丢失很小的情况下(人耳根本无法察觉这种音质损失)把文件压缩到更小的程度。2.2.5 WAV格式WMA (Windows Media Audio)是微软在互联网音频、视频领域的力作。WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:18。此外,WMA还可以通过DRM(Digital Rights Management)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。2.2.6 RealAudio格式RealAudio是由Real Networks公司推出的一种文件格式,最大的特点就是可以实时传输音频信息,尤其是在网速较慢的情况下,仍然可以较为流畅地传送数据,因此RealAudio主要适用于网络上的在线播放。现在的RealAudio文件格式主要有RA(RealAudio)、RM(Real Media,RealAudio G2)、RMX(RealAudio Secured)等三种,这些文件的共同性在于随着网络带宽的不同而改变声音的质量,在保证大多数人听到流畅声音的前提下,令带宽较宽敞的听众获得较好的音质。2.3 常见播放器2.3.1 千千静听千千静听是一款完全免费的音乐播放软件,拥有自主研发的全新音频引擎,集播放、音效、转换、歌词等众多功能于一身。其小巧精致、操作简捷、功能强大的特点,深得用户喜爱,被网友评为中国十大优秀软件之一,并且成为目前国内最受欢迎的音乐播放软件。千千静听支持几乎所有常见的音频格式,包括MP3/mp3PRO、AAC/AAC+、M4A/MP4、WMA、APE、MPC、OGG、WAVE、CD、FLAC、RM、TTA、AIFF、AU等音频格式以及多种MOD和MIDI音乐,以及AVI、VCD、DVD等多种视频文件中的音频流,还支持CUE音轨索引文件。侧屏幕提 供有关影碟或歌曲的信息或广告,可以将丰富多彩的Web页面、生动传神的画面及声音、相关背景的文字整合在同一个画面上,使用户得到一个完整的声、视、讯信息。2.3.2 酷狗酷狗(KuGou)是国内最大也是最专业的P2P音乐共享软件。酷狗主要提供在线文件交互传输服务和互联网通讯,采用了P2P的先进构架设计研发,为用户设计了高传输效果的文件下载功能,通过它能实现P2P数据分享传输,还有支持用户聊天、播放器等完备的网络娱乐服务,好友间也可以实现任何文件的传输交流,通过KuGoo,用户可以方便、快捷、安全地实现音乐查找,即时通讯,文件传输,文件共享等网络应用。支持本地播放,兼容所有音频文件,超完美音质,音乐播放更动听。2.3.3 QQ音乐QQ音乐播放器是一款带有精彩音乐推荐功能的播放器。是少数上传音乐功能收费的音乐播放器。是少数不能收藏本地音乐的播放器。能无聊时听听音乐,同时支持在线音乐和本地音乐的播放,是国内内容最丰富的音乐平台。其独特的音乐搜索和推荐功能,让您可以尽情地享受最流行,最火爆的音乐。2.4 MCI命令接口编程Windows MCI(media control interface)是控制多媒体设备的高层、通用的命令接口。MCI可控制所有Windows能驱动的多媒体设备,包括CD音频(CDAudio)、数字视频、动画、数字化波形声音、MIDI音序器、录像机及影碟机等。MCI包含在Windows系统的MMSYSTEM.DLL动态链接库中,有以协调多媒体事件和MCI设备驱动程序之间的通信。一些MCI设备驱动程序,如影碟机设备驱动程序,可以直接控制目标设备;而另外一些MCI设备驱动程序,如Wave和MIDI设备驱动程序,可通过MMSYSTEM中的函数,间接控制目标设备;还有一些MCI设备驱动程序则提供与其他Windows动态链接库连接的高层接口。2.4.1MCI设备使用MCI的应用程序通过指定MCI的设备来区分MCI设备,设备类型说明了设备的物理类型。表1表出了可能用到的MCI设备类型。表 2-1MCI设备类型MCI设备说明Cdaudio激光唱机Waveaudio数字化波形声音设备SequencerMIDI音序器Overlay视频叠加设备(窗口中的模拟视频)Dat数字化磁带音频播放机Digitalvideo窗口中的数字视频Scanner图像扫描仪Vcr磁带录像机或播放机Videldisc影碟机Mmmovie多媒体影片播放器Other示定义的MCI设备2.4.2MCI命令应用程序能过MCI设备发送命令(命令消息或命令字符串)来控制MCI设备,MCI命令可以分为4类,如下所术。1) 系统命令:直接由MCI解释并由系统处理,是不传送到MCI设备的命令。2) 通用命令:所有MCI设备都支持的MCI命令。3) 可选命令:MCI设备可选择使用的MCI命令。4) 专用命令:针对某类MCI设备或集合的专有MCI命令。MCI定义了两种接口方式,即命令消息方式和命令字符串方式。相应地,MCI命令可分为命令消息和命令字符串。主要的MCI命令及分类如表2所示,这些命令可能具有其相应的扩展形式。表 2-2 MCI命令列表MCI命令消息MCI命令字符串MCI命令说明MCI命令类型MCI_SYSINFOSYSINFO返回有关MCI设备的停息系统命令MCI_BREAKBREAK为一个指定的MCI设备设置一个终止键MCI_SOUNDSOUND播放一段Windows指定的系统声音MCI_CLOSECLOSE关闭一个MCI设备通用命令MCI_GETDEVCAPSGETDEVCAPS获得一个MCI设备的性能参数MCI_INFOINFO从一个MCI设备得到有关的信息MCI_OPENOPEN初始化一个MCI设备MCI_STATUSSTATUS从一个MCI设备返回有关的状态信息MCI_LOADLOAD从一个磁盘文件中加载数据可选命令MCI_PAUSEPAUSE暂停播放数据MCI_PLAYPLAY开始播放数据MCI_RECORDRECORD开始记录数据MCI_RESUMERESUME重新开始播放或记录MCI_SAVESAVE将数据存储到磁盘文件中MCI_SEEKSEEK向前或向后检索MCI_SETSET设置设备信息MCI_STOPSTOP停止播放或记录 MCI命令都可以带两个标志命令来控制命令的方式,即“wait”和“notify”。它们在命令消息和命令字符串接口的形式和意思如表3所示。表 2-3MCI标志命令命令消息命令字符串功 能MCI_WAITwait通知MCI设备等,MCI命令执行完后,才能将控制权还给应用程序MCI_NOTIFYnotify通知MCI设备等,立刻将控制权交给应用程序,但当命令执行完后,向应用程序发送MM_MCINOTIFY消息所有MCI函数都以mci为前缀。对应于MCI命令消息和命令字符串接口方式,MCI函数也分为两类,即命令消息函数和命令字符串函数。在MMSYSTEM.H中定义了这些函数的原型。MCI函数如表4所示。表 2-4MCI函数函数名功 能类型mciSendCommand发送命令消息命令消息接口函数mciGetDeviceID获取MCI设备的IDmciSetYieldProc设定一个回调函数,在结束带wait标志的命令时调用mciGetYieldProc获取当前的回调函数mciSendString发送命令字符串命令字符串接口函数mciGetErrorString获取当前MCI错误的字符串描述公用函数2.4.3MCI命令消息接口方式MCI命令消息接口方式利用消息和数据结构来给多媒体设备发送命令和接收MCI设备传来的信息。这种方式的接口函数主要有3个,即mciSendCommand,mciGetDeviceID和mciGetErrorString。它们的函数原型如下:MCIERROR mciSendCommand ( MCIDEVICEID IDDevice, /设备ID UINT uMsg, /命令消息 DWORD fdwCommand, /命令消息标志 DWORD dwParam /命令消息使用的结构参数地址);MCIDEVICEID mciGetDeviceID ( LPCTSTR lpszDevice /设备类型);BOOL ( DWORD fdwError, /错误代码 LPTSTR lpszErrorText, /错误描述 UINT cchErrorText /错误描述长度);mciGetDeviceID通过传送MCI设备名lpszDevice来获取MCI_OPEN命令消息找开MCI设备的标识号wDeviceID,其值可用于mciSendCommand的参数wDeviceID。mciSendCommand用于向标识号为wDeviceID的MCI设备发送命令消息uMsg。当用送MCI_OPEN命令消息打开一个设备时,将自动创建一个设备标识号。如果设备打开成功,可以从MCI_OPEN_PARMS结构的wDeviceID数据域中取得该设备的标识号,该值将保存以供后续的MCI命令使用。如果mciSendCommand调用成功,则返回值为0;否则表示设备驱动出错,这时可用mciGetErrorString来取得错误信息的文字描述。MCI提供一个名为MCI_ALL_DEVICE_ID的特殊设备标识号。当前所有已打开的MCI设备都将接收到对MCI_ALL_DEVICE_ID发送的任何MCI命令。使用任何一个MCI设备前都应先用MCI_OPEN打开它。打开MCI设备时,要求指定相应的MCI_OPEN_PARMS结构。如果打开设备成功,则该结构的wDeviceID域返回MCI设备的标识号ID。使用MCI_OPEN命令消息时可使用的命令消息中表5所示。MCI_OPEN_PARMS结构定义如下:typedef struct DWORD dwCallback; /回调窗口句柄 MCIDEVICEID wDeviceID; /设备打开成功,返回的设备号 LPCSTR lpstrDeviceType; /设备类型 LPCSTR lpstrElementName; /复合设备的设备元素,通常为文件名 LPCSTR lpstrAlias; /指定的设备别名 MCI_OPEN_PARMS;表2-5MCI_OPEN命令消息标志消息标志意 义MC_OPEN_ALIASMCI_OPEN_PARMS结构的lpstrAlias域中指定了设备别名MC_OPEN_ELEMENTMCI_OPEN_PARMS结构的lpstrElementName域中指定了设备元素MC_OPEN_SHAREABE按共享设备方式打开设备MC_OPEN_TYPEMCI_OPEN_PARMS结构的lpstrDeviceType域中指定了设备类型MC_OPEN_TYPE_IDMCI_OPEN_PARMS结构的lpstrDeviceType域中指定了设备类型ID打开一个简单的MCI设备不需要指定设备元素,即不需要指定一个数据文件,所以可以仅仅指定MCI_OPEN_PARMS结构中的wDeviceID和lpstrDeviceType两个数据域。要打开一个复合的MCI设备,必须指定设备元素数据域lpstrElementName和设备类型数据域lpstrDeviceType。对于打开复合MCI设备,有以下3种方式可供选择:1) 为确定MCI设备的性能,可以只指定设备的类型来打开MCI设备。这时,只允许确定MCI设备的性能,然后关闭设备,不般不能进行其它的操作。2) 为使一个设备元素与指定设备相联系,应同时指定设备元素(数据文件名)和设备类型。这时可对设备进行相应的各种操作。3) 在使用隐含的MCI设备时,可只指定MCI设备(数据文件名),而把设备类型指定为NULL;MCI将根据设备元素的扩展名从系统定义中选择隐含约定的MCI设备。应用程序在使用完一个MCI设备后应明确地关闭该MCI设备。MCI_CLOSE命令消息用于关闭并释放MCI设备,即取消应用程序对MCI设备或设备元素的访问权。当用MCI_SYSINFO命令消息获取MCI设备系统信息时,需要在mciSendCommand的dwParam参数中指定MCI_SYSINFO_PARMS结构的地址,系统信息将通过该结构返回。与MCI_SYSINFO命令消息相关的消息标志如表6所示。MCI_SYSINFO_PARMS结构定义如下:typedef struct DWORD dwCallback;/回调窗口句柄 LPSTR lpstrReturn; /返回信息缓冲区地址 DWORD dwRetSize; /返回信息大小 DWORD dwNumber; /索引号 UINT wDeviceType; /设备类型 MCI_SYSINFO_PARMS;表 2-6MCI_SYSINFO命令消息标志消息标志意 义MCI_SYSINFO_QUANTITY返回指定的设备类型的数目,如与MCI_SYSINFO_OPEN一起使用,则仅返回已打开的设备的数目MCI_SYSINFO_NAME返回设备名,如与MCI_SYSINFO_OPEN一起使用,则仅返回已打开的设备的名称MCI_SYSINFO_OPEN仅返回已打开设备的信息MCI_SYSINFO_INSTALLNAME指定设备的安装名称在使用MCI设备时,还应注意共享、等待与通告等标志的使用。2.4.4MCI命令字符串接口方式MCI命令字符串使用ASCII字符串来发送驱动MCI设备的命令,这种方式采用的接口函数有mciSendString、mciGetErrorString。mciSendString用于向MCI设备发送命令字符串,其函数原型如下:MCIERROR mciSendString( LPCTSTR lpszCommand, /指向一个以NULL结尾的MCI命令字符串,格/式如下:comm.and device_name argument LPTSTR lpszReturnString, /指向一个用于存储MCI命令执行后返回的/字符串信息的缓冲区 UINT cchReturn, /缓冲区大小 HANDLE hwndCallback /指定一个接受MM_MCINOTIFY的窗口句柄,/非MCI命令中包含了notify标志,否则该参数可忽略。);第三章 软件需求分析3.1需求分析随着技术的发展,音频的格式也在不断地增加,包括MP3,wav,wmv等,因此需要开发一个音乐播放器来实现各种音频的播放,同时也为了丰富了人们的娱乐生活,它使用方便,操作简单,功能强大、占用空间小,能够满足人们的各种基本需要。此外,为了方便使用,还具有对播放列表进行操作的功能,因此开发制作这一播放器具有备现实意义。3.2可行性研究要开发一个软件程序,其方案十分重要。一个合理可行的方案有助于减少程序员的工作量、缩短开发周期,更重要的是可以开发出运行效率更高、可移植性更好、健壮性更强的代码。以下是本程序的方案论证:本程序的开发用的是VC+的MFC集成开发环境,开发本程序的方案大概有如下二种:1、利用VC开发环境提供的ActiveX控件ActiveMovieControl Object2、利用系统自带的MCI命令接口来编程。(1)第一种方法是使用ActiveX控件,MFC可以利用“ActiveMovieControl Object”控件直接操作,实现起来非常简单,但用到的是完全别人的东西,故而不是太好。(2)第二种方法是使用系统自带的MCI命令接口。MCI包含在系统的MMSYSTEM.H文件中,参数较多,功能比较齐全,虽然使用起来比较烦琐,但是更具有开发意义。综上所述,使用系统自带的MCI命令接口来编程的方法是比较理想的选择。以下的开发设计流程就是基于第二种方案的设计流程。第四章 播放器软件的实现4.1程序设计的基本思想最初运用MFC,建立对话框为基本框架。因为本软件是以系统自带的MCI命令接口为基础,所以为丰富本软件,将重点和难点放在了界面设计方面。4.1.1 功能模块图MP3播放器打开文件关闭文件播放歌曲暂停播放停止播放播放列表音量控制 图 41 系统功能模块图4.1.2 基本界面设置在基本界面确定后,添加各类控件,如图所示:图 42 对话框基本框架将Button定义为自定义CButtonST按纽类的对象,进度滑条定义为自定义的CMySliderControl类的对象,时间显示静态文本定义为自定义的CMatrixStatic。各个控件的位置是由程序控制,所以原来摆在什么地方并不影响程序显示出来的效果。4.1.3 打开文件,添加列表打开文件有两种方法,一是通过主面板上打开按纽,二是通过主板下面的添加按钮。打开文件:CButtonST, IDC_OPEN, m_btnOpen4.1.4 播放控制播放控制包括:播放,暂停,停止,播放进程控制。播放控制也可在菜单中进行控制。1. 播放:CButtonST,IDC_PLAY, m_play2. 暂停:CButtonST,IDC_PAUSE, m_pause3. 停止:CButtonST,IDC_STOP, m_stop4. 播放进程控制CMySliderControl, IDC_SLIDER, m_slider4.1.5 对列表的控制列表的控制包括:添加文件,删除当前所选项,删除全部,在列表中双击播放,列表的隐藏弹出。设置如下:1. 添加文件:CButtonST, IDC_LISTADD, m_btnListAdd2. 删除文件:CButtonST, IDC_LISTREMOVE, m_btnListRemove3. 列表中的双击播放:LISTBOX本身的LBN_DBLCLK消息函数OnDblclkList()4. 列表的隐藏弹出:CButtonST, IDC_EXT, m_btnExt4.1.6 音量控制除去上述功能控制之外,还包括音量控制。音量控制:IDC_VOLDEC, m_btnVolDec4.2程序设计的详细说明4.2.1 界面设置各个自定义类的声明:1. CButtonST类:详细说明请见程序。2. CMySliderControl类:详细说明请见程序。3. CMatrixStatic类:详细说明请见程序。先设置基本界面的图形,如下: 图 43 主界面的图程序中绘制界面,先通过坐标定位按钮,然后把按钮设置为透明的,每一个按钮都这样设置,就完成了整个界面的绘制。在主对话框的类定义中声明:private:void InitMPlayerFace();/初始化界面在主对话框的初始化程序里调用该函数,具体定义请参照程序中函数:void CMediaDlg:InitMPlayerFace()/窗口大小SetWindowPos(NULL,0,0,MPLAYERWIDTH,MPLAYERHEIGHT,SWP_NOZORDER|SWP_NOMOVE);/设置窗口标题ModifyStyle(0,WS_SYSMENU); /add an icon on the task barSetWindowText( 多媒体播放器 );/关闭按扭m_btnClose.MoveWindow(240,1,8,10);m_btnClose.SetTooltipText(关闭);m_btnClose.DrawTransparent();/最小化按扭m_btnMiniWnd.MoveWindow(218,1,10,9);m_btnMiniWnd.SetTooltipText(最小化);m_btnMiniWnd.DrawTransparent();/打开文件按扭m_btnOpen.MoveWindow(17,64,18,12);m_btnOpen.SetTooltipText(选择文件);m_btnOpen.DrawTransparent();/播放按扭m_btnPlay.MoveWindow(37,57,25,25);m_btnPlay.SetTooltipText(播放);m_btnPlay.DrawTransparent();/暂停按扭m_btnPause.MoveWindow(64,63,18,12);m_btnPause.SetTooltipText(暂停);m_btnPause.DrawTransparent();/停止按扭m_btnStop.MoveWindow(87,63,18,12);m_btnStop.SetTooltipText(停止);m_btnStop.DrawTransparent();/声音m_btnVolDec.MoveWindow(156,63,29,14);m_btnVolDec.SetTooltipText(音量);m_btnVolDec.DrawTransparent();/进度条m_sld.MoveWindow(15,42,227,16);m_sld.SetThumbColors(0x008FA6F4,0x00FDE2D8);/液晶显示m_lcd.MoveWindow(5,17,60,20);m_lcd.SetNumberOfLines(1);m_lcd.SetXCharsPerLine(11);m_lcd.SetSize(CMatrixStatic:TINY);m_lcd.SetDisplayColors(RGB(0, 0, 0), 0x007FFF40, RGB(103, 30, 0);m_lcd.AdjustClientXToSize(8);m_lcd.AdjustClientYToSize(1);m_lcd.SetText(_T(Hello );m_lcd.SetAutoPadding(true, .);/demonstrates auto padding with different characterm_lcd.DoScroll(200, CMatrixStatic:LEFT);/扩展列表按扭m_btnExt.MoveWindow(4,65,10,10);m_btnExt.SetBitmaps(IDB_EXT,NULL,NULL);m_btnExt.SetFlat();m_btnExt.SetColor( CButtonST:BTNST_COLOR_BK_IN,0x00FD0C00);m_btnExt.SetTooltipText(显示文件列表);bExt=FALSE;/list controlm_list.MoveWindow(2,91,244,111);/增加列表文件按扭m_btnListAdd.MoveWindow(3,205,37,12);m_btnListAdd.SetTooltipText(添加文件到列表);m_btnListAdd.DrawTransparent();/移除列表文件按扭m_btnListRemove.MoveWindow(44,205,48,12);m_btnListRemove.SetTooltipText(从列表中移除文件);m_btnListRemove.DrawTransparent();在主界面设置好相应的位置后,就开始定义各个控件的具体功能。4.2.2 打开文件,添加列表打开文件 打开文件是通过调用OnOpen()函数,在打开的同时进行播放。打开添加文件的程序主要写在按纽的BN_CLICKED消息函数里面。程序如下:bool CMPlayerDlg:OpenFiles(bool bListAdd)/open files and add to listCFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,_OPENTYPE);if(FileDlg.DoModal()!=IDOK)return FALSE;if(!bListAdd)m_list.ResetContent();POSITION pos=FileDlg.GetStartPosition();CString lpszFile;lpszFile=FileDlg.GetNextPathName(pos);while(1)m_list.AddString(lpszFile);if(!pos)break;lpszFile=FileDlg.GetNextPathName(pos);m_iList=0;m_totalFiles=m_list.GetCount();return TRUE;void CMPlayerDlg:OnOpen()if(!OpenFiles()return;OnPlay();/调用 OnPlay() 4.2.3 播放控制1)播放:播放功能首先要判断列表里面有没有音频文件,要是有就调用Play()函数,进行播放。Play()函数是实现文件从头开始播放,并获取播放长度,并且更新相关变量。程序如下:bool CMPlayerDlg:Play()if(bOpened)/close previous mediam_media.Close();bOpened=FALSE;CString strError;m_list.SetSel(m_iList-1,FALSE);if(m_iList=m_totalFiles)/list pointer flow outm_iList=0;m_list.SetSel(m_iList,TRUE);m_list.GetText(m_iList,m_curFile);m_media.Create(m_curFile,strError);if(strError!=OK)#if _DEBUGAfxMessageBox(strError);/get error message#endifCString errorMsg;errorMsg=Can not open file: ;errorMsg+=m_curFile;AfxMessageBox(errorMsg);return FALSE;/bFirstPlay=TRUE;/first play the mediaBeginWaitCursor(); m_media.Play(0);/play from 0 position/ get orginal size of Media windowbIsVideo=m_media.IsVideo();if(bFirstPlay & bIsVideo)/first play the media ,get the orginal window rectangle sizeCWnd* pMediaWnd=GetMediaWnd();pMediaWnd-GetWindowRect(&m_mediaWndRect);iZoom=DOUBLESIZE;bFirstPlay=FALSE;/update windowbOpened=TRUE;bPause=FALSE;UpdateWindowEx(bOpened);InitSlider();/initialize the slider bar/set the timer, 1 second intervalm_nTimer = SetTimer(1, 1000, 0);m_curPlayTime.min=(UINT)0;m_curPlayTime.sec=(UINT)0;/m_lcd.AdjustClientXToSize(10);m_lcd.SetText(_T(Play 00;00);m_lcd.StopScroll();/ get framerate if video fileif(bIsVideo)m_frameRate=m_media.GetFrameRate();elsem_frameRate=0;EndWaitCursor(); return TRUE;void CMPlayerDlg:OnPlay () if(!m_totalFiles)/no media file in the listif(!OpenFiles()/cancel openreturn;Play();2)暂停: 暂停是通过调用mciSendString函数,要是有文件正在播放就暂停,要是文件处于暂停状态就从暂停的地方继续播放。void CMedia:Pause()if(m_pause)/中断后继续播放mciSendString(resume myMedia,NULL,0,NULL);else /中断播放 mciSendString(pause myMedia, NULL,0,NULL);m_pause=!m_pause;void CMPlayerDlg:OnPause() m_media.Paus

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论