可换肤MP3播放器的设计与实现_第1页
可换肤MP3播放器的设计与实现_第2页
可换肤MP3播放器的设计与实现_第3页
可换肤MP3播放器的设计与实现_第4页
可换肤MP3播放器的设计与实现_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计设计报告指导老师评语:评定成绩: 签名: 日期:目录1概述 4课程设计目的: 41.2 设计任务与要求: 51.3 开发环境: 62 系统设计的基本概念与原理 6基本概念与知识 8MFC简介 8关于MCI 8系统实现的基本原理及过程: 93系统的总体设计与分析 103.1 MP3播放器需求分析 10需求矩阵 11功能模块图: 11系统设计实现的基本原理与过程 134 系统详细设计与实现 154.1 创建新工程 154.2 设置控件模块 154.3 界面布局设计 164.4 动态链接库 184.5 添加图片 184.6 各模块功能设计 194.6.1 处理“打开”按钮 194.6.2 处

2、理“播放”按钮 244.6.3 处理“暂停”按钮 274.6.4 处理“停止”按钮 284.6.5 处理“退出”按钮 28程序中的主要类和函数 285系统的调试与运行 345.1 测试方法 345.2 测试过程 345.3 测试结论 356 课程设计总结 36参考文献 37附录 部分程序代码 381概述摘 要I的多媒体播放器。该播放器是基于MFC集成开发环境,利用系统的MCI(media controller interface)命令接口来编程,具有体积小,支持的播放格式多、系统资源占用少、支持播放列表编辑等功能优势。另,本课程设计还用到了在对话框中加入连接到Internet的方法。关键词 程

3、序设计;MCI;C+;音乐播放器;超级链接:本课程设计通过对Windows API的多媒体和资源文件的高层控制MCI进行封装,建立了一个MP3播放器的类CPlayerDlg,使得我们不必研究MCI的内部函数,轻松调用CPlayerDlg类的函数,就能实现播放WAV、MID、MP3等Windows音频格式的文件。1、通过本次课程设计,熟练掌握一种开发语言(Java或C+、C#)和开发环境Eclipse或.NET。开发语言的熟练需要通过编写一定长度的代码(10002000行代码)才能达到,开发环境的熟练需要反复的程序调试训练。2、加深对软件工程的理解,训练编写程序的良好习惯。包括:认真编写需求分析

4、文档、做好系统功能设计、学会自己进行程序的算法、数据结构设计、3、培养良好的程序设计风格(模块划分、接口设计、函数和变量命名规则)和习惯(程序备份、版本更新与控制),提高软件测试、调试的能力与技巧。通过本次课程设计,应该达到具有独立完成小型应用设计的能力,具备编写较为规范的软件设计文档的能力。1.2 设计任务与要求:MP3媒体播放器软件是采用MFC设计的Windows应用程序,在MFC的集成环境下填加文档/视图结构。这种程序框架和简单应用程序之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要三个类对象:1框架窗口类对象,2视图类对象,3文档类对象。1、2、3组成应用程序的界

5、面。在加入MP3的解码使程序界面有播放MP3的功能。MP3媒体播放应用程序是用Windows Media Player的界面插件,并且应用Media Player的解码功能,使应用程序能够界面清析、播放格式增加并且操作简单。本课程设计将实现目前Winamp播放器所具有的多数基本功能,并提供一些额外的辅助功能。具体而言,其实现的功能和技术服务包括以下几个方面:(1)高层的音频服务。(2)媒体控制接口。(3)连接多媒体设备,并自动判断设备类型。(4)API函数mciSendCommand()。(5)打开和关闭指定的音频文件。(6)实现复读机功能。(7)播放视频格式文件。(8)出错情形说明。(9)程

6、序托盘管理。(10)超级链接类的使用。1.3 开发环境:列出开发工具、程序运行的支持环境(操作系统、数据库等)。操作系统:Windows XP 简体中文版开发平台:Visual开发平台介绍:Visual C+ 。它是微软公司推出的开发Win32应用程序(Windows 95/98/2000/XP/NT),面向对象的可视化集成工具。它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C+类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有

7、的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。MFC (Microsoft Foundation Class 是用来编写Windows 应用程序的C + 类集,其中封装了分之所以Windows API 函数和Windows 控件,使用MFC 类库和Visual C + 提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。随着多媒体性能的极大提升,程序中经常要播放一段视频或者一段音频,如果能够简单地插入音频和视频,将极大缩短程序的开发时间。本文基于MFC 在Visual C + 环境下利用Windows Me

8、dia Player 控件实现了音频视频文件的播放。Visual C+作为开发工具,不仅仅因为曾经有过使用它的经验,看中的更是它的功能强大和使用方便。它本身不仅具有极其强大的编程能力,它允许选择和管理外接程序,并内含多种实用控件,这些对Visual C+的扩充又进一步增强了它的开发环境的能力。 1.4 可行性分析和需求分析 经济可行性由于该软件属于个人开发,无需过大的资金投入.所以经济上是可行的。 技术可行性VC+6.0中文版作为一个关系型数据库系统,它提供了面向对象的编程技术,可简化数据库管理,使开发应用程序这艰辛的工作就象堆木那样简单方便.另外, VC+6.0中文版开发的应用程序可以独立运

9、行于WINDOWS平台. VC+6.0中文版,它是运行于W indows95/98和Window XP平台32位数据库系统,充分发挥了32位微处理器强大的32位数据处理性能.它功能强大,直观易用,支持客户/服务器结构和面向对象编程,提供多种可视化编程工具,支持最新Internet技术,WWW数据库的设计,最新流行的ActiveX 等。 VC+6.0中文版完全支持OOP(面向对象)的应用程序设计方法,VC+6.0使用了真正的类,包括继承性,封装性和多态性,用可视方式创建类,查看类及类代码;利用表单向导进行专业级界面设计;对表关系进行可视化查看;可利用OLE自动化来包含其他软件(如Excel, w

10、ord)中的对象并使用这些软件。通过VC+6.0对象和事件模型,用户可以快速创建和实现无模式(Modeless)的应用程序;利用生成器和工具栏,开发人员可以快速开发应用程序,而省去编写大量的代码、定义繁多的属性。总之,VC+6.0中文版是一种适用于专业人员的开发工具。 人员可行性我目前时间充足,可以完成开发任务。而且C+语言和算法的功底还行,可以参与系统的算法设计与开发。我都有有深厚的文字功底,可以参与用户文档的制作、内部文档整理、后期测试等任务。本系统开发设计思想: 尽量利用人们现有的软件环境,采用简单快捷的设计方案,从而达到使用方便,容易操作的目的; 此播放器可以满足大多数人日常使用的需要

11、,并达到操作过程的直观、方便、实用、安全等要求; 软件采用模块化程序设计方法,既便于软件功能的各种组合和修改,又便于技术维护人员进行补充、维护。2 系统设计的基本概念与原理1.1基本概念与知识MP3播放器的设计是利用MFC应用程序、媒体控制接口MIC的基本知识而设计的。MFC简介MFC是Visual C+是核心。MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了

12、标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用1。关于MCIWindows已经提供了一个关于多媒体处理的动态链接库WINMM.DLL,通过调用它所提供的API函数,就可以使用MCI指令进行多媒体方面的操作了。MCI的全称是Media Control Interface(媒体控制接口),为各种多媒体设备,包括音频视频交错(AVI)重放、动画播放机、VCD、CD播放器以及声卡上的波形音频和合成器系统,提供了一个公共的接口。用MCI函数可以给上述的任何一种设备发出命令,告诉它

13、们开始、结束、暂停、倒退、快进等就像按动MP3播放器面板上的按钮一样。每一个设备的特殊命令依赖于设备本身的功能。实际上MCI是一个高级的函数调用接口,可以把它看作揖个解释器,通过它,就可以直接和外部音频或视频设备打交道了。必须注意的是,在MCI工作过程中,需要在指令中调用API函数,这样才能实现应用设备与多媒体设备连接。有3个与MCI有关的API,即mciSendString(、mciExecute(和mciGetErrorString(。mciSendString函数的功能是传送指令字符串给MCI;mciExecute的功能和mciSendString一样,不同的是当发生错误时mciExec

14、ute会弹出对话框显示错误信息;mciGetErrorString的功能是将MCI错误代码转换为字符串。在系统实现的基本原理及过程:本课程设计中,将会说明如何用MCI和API函数编程实现播放Windows支持的各种音频文件。MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。它所支持的媒体格式包括avi、wav、mpeg等等2。音频技术发展较早,几年前一些技术已经成熟并产品化,音频技术主要包括四个方面:音频

15、数字化、语音处理、语音合成及语音识别。音频文件包括多种格式的文件,MP3就是其中的一种。MP3的全称是Moving Picture Experts Group,Audio Layer ,它所使用的技术是在VCD(MPEG-1的音频压缩技术上发展出的第三代,而不是MPEG-3。MP3是一种音频压缩的国际技术标准,它一般需要MP3播放器来读取。首先确定要解决的问题是弄清楚MCI函数与命令消息的名称类型和功能;其次是通过分析媒体播放的具体过程,在打开媒体设备的过程中应用程序需要做哪些事情,以便在应用程序中加入对这些过程支持的代码;在对应用程序的流程有了大致的轮廓以后,再开始考虑程序框架和应用程序外观

16、的设计.最后,也是最关键的就是编写实现播放器的代码将播放器的基本功能实现,紧接着就是程序的调试和完善。3系统的总体设计与分析3.1 MP3播放器需求分析本章主要讨论了系统的需求分析,从用户角度分析系统整体要实现的功能及要完成的任务,并细化所有功能点.作为MP3 播放器系统,它应该包含以下功能:实现基本的播放、暂停、停止功能;能实现快进快退以及显示播放列表等功能。同时本文还要求需要实现换肤功能。具体目标如下:1 能够方便地选择本机上的一个mp3文件进行播放。选择mp3文件时,不需要有键盘输入操作。2 播放过程中可以暂停,暂停后可以从暂停处再次播放。播放过程中可以停止,按下播放按钮后,可以再次从开

17、头播放本文件。本程序提供“快进”、“快退”按钮,播放和暂停状态都可以快进快退,并保持当前状态不变。3 播放、暂停、或停止状态中,都可以选择其它mp3文件代替当前mp3文件进行播放。4 本程序中要有一个滚动条来显示当前的mp3文件播放位置,拖动滚动条,可以调节mp3文件的播放位置。5 在面板上显示mp3文件当前播放的时间。播放时间随时刷新,配合好前面的播放调节操作。7)本程序中要有一个面板来显示列表,并且拥有删除、添加文件等功能。8)本程序中要可以更换皮肤。9 提供“帮助”,“关于”等菜单按钮。退出按钮要绝对有效,能够完美地结束整个程序,不在内存中留下垃圾。10 界面尽量美观,程序运行时不要出现

18、异常。本章主要讨论了系统的需求分析,从用户角度分析系统整体要实现的功能及要完成的任务,并细化所有功能点,为每一功能但定义“需求描述”、“输入输出”。同时为方便后期设计、编码和测试。需求矩阵表 3-1 需求矩阵表需求功能需求描述播放状态显示1、用户界面能显示正在被播放歌曲的进度,显示歌曲的播放状态;2、用户能够显示正在被播放歌曲的音量;3、显示被播放歌曲的歌名。播放控制1、用户能够控制正在被播放歌曲的进度,能够控制歌曲停止、暂停与播放;2、用户能够调节正在被播放歌曲的音量;3、用户能够切换上一首和下一首歌曲列表中歌曲管理1、在歌曲列表中能够添加用户所需要的歌曲文件的文件名,并长期保存在该列表中直

19、到用户删除该列表中的歌曲名。核心播放控制1、完成歌曲播放最核心的部分,能够将打开MP3文件,并将其解码,然后启动音频硬件播放歌曲。3.2功能模块图:总体设计模块其中输入模块里面有负责打开文件的功能,供用户选择文件,处理模块负责多媒体文件的音量大小的调节,调大.调小和静音功能,还有对播放文件的播放, 暂停,快进快退,停止等必备功能,输出模块负责在显示屏显示文件!列表控制系统功能模块图图形界面mp3播放器。根据常识来看,打开软件后,会出现图形界面,然后点击图形界面,选择mp3文件,点击开始,即可播放了。程序规划流程图如图3-3所示:等待信号发生并处理图3-3 程序规划流程图无论在什么平台下,无论用

20、什么开发工具,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选项,添加一个新

21、的对话框,命名为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 软件系统总体设计图根据系统总体结构设计划分系统子

22、结构,并定义每一子系统的“功能描述”、“界面设计”、“数据说明”及“处理流程”等。该概要设计主要为后期的详细设计及编码提供参考。功能描述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

23、 加入多媒体处理的动态链接库4.5 添加图片添加主对话框和各个控件的图片。本课程设计具有美观大方的界面。界面的实现是通过编程将不同的Bitmap图片覆盖到对应的主对话框及控件上。因此,需要在Resouce资源中添加Bitmap图片。单击Resouce View面板,右击Player Resources项,在弹出的菜单中选择Insert,添加Bitmap内容。右击Bitmap,在弹出的菜单中选择Insert,向工程中添加与控件相对应的图标。Mp3Player对话框中所用控件的属性描述如表所示。控件ID描述IDC_STATIC_INFO_WNDGroup Box控件,用来显示“信息窗口”IDC_S

24、TATIC_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 处理“打开”按钮单击“打开”按钮后,在OnButtonO

25、pen(函数中,首先对文件类型进行过滤,调用DoModa(函数打开对话框选择一个媒体文件,通过GetPathName(函数获取文件路径,通过GetFileName(函数获取文件名后,调用DisplayInfo(函数在Static Text控件上显示“你选择的歌曲是(文件名)”,然后利用GetDlgItem(函数设置“暂停”按钮以及“停止”按钮不可用。先点击打开按钮,弹出如图4-6-1对话框:图 4-6-1void CActiveMovie3:OnOpen( char szFileFilter="Mp3 File(*.mp3|*.mp3|""Wma File(*.w

26、ma|*.wma|""Video File(*.dat|*.dat|""Wave File(*.wav|*.wav|""AVI File(*.avi|*.avi|""Media File(*.mmm|*.mmm|""Mid File(*.mid;*,rmi|*.mid;*.rmi|""MPEG File(*.mpeg|*.mpeg|""All File(*.*|*.*|"/文件类型过滤CFileDialogdlg(TRUE,NULL,NULL,O

27、FN_HIDEREADONLY,szFileFilter;if(dlg.DoModal(=IDOKCString 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_INCLUDE

28、D_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000/ CPlayerDlg dialog#include"mmsystem.h"class CPlayerDlg : public CDialog/ Constructionpublic:int hour,minute,second;/时间变量:小时、分钟、秒钟DWORD cdlen;/某个音频文件的总时间长度DWORD m_count;/设备型号void Tplay(;void Thide(;void Tdehide(;void forfor(;vo

29、id 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_s

30、top;CBitmapButton m_open;CBitmapButton m_rp;CBitmapButton m_pop;CBitmapButton m_next;CBitmapButton m_sdel;CBitmapButton m_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 Abou

31、t/进行程序主界面的初始化,并向控件中添加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.L

32、oadBitmaps(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

33、(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_ICONERASE

34、BKGND, (WPARAM dc.GetSafeHdc(, 0;int cxIcon = GetSystemMetrics(SM_CXICON;int cyIcon = GetSystemMetrics(SM_CYICON;CRect rect;GetClientRect(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(CDC dc

35、Mem; 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.MoveWin

36、dow(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,4

37、0,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(函数获取刚才选择的文件路径以及

38、文件名,调用该类的MCIPlay(函数播放歌曲,此时调用DisplayInfo(函数在Static Text控件上显示“正在播放的歌曲是(文件名)”,进行歌曲的播放,然后利用GetDlgItem(函数设置“播放”按钮不可用。(1) 为了循环播放,我们利用定时器来工作,采用OnTimer(函数来激活定时器:void CActiveMovie3:OnTimer(UINT nIDEventCString m_filename; /定义文件变量double CurPos=m_ActiveMovie.GetCurrentPosition(; /获得播放位置if(CurPos= = 0m_list.Set

39、CurSel(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 CMediaPla

40、yerDlg:OnRepeat( /循环控制函数,实现对循环的控制功能if(!isRepeat /判断是否正在循环SetTimer(1,2000,NULL; /设置循环的标志为1,循环间隔为2秒isRepeat=TRUE; /将循环变量设为TURESetDlgItemText(IDC_STATIC2,"模式:循环" /将静态文本显示为循环模式 elseKillTimer(1; /停止标志为1的循环isRepeat=FALSE; /将循环变量设为FALSESetDlgItemText(IDC_STATIC2,"模式:普通" /将静态文本显示为普通模式(4)

41、全屏播放功能调用了,代码如下:void CActiveMovie3:OnFulscreeen( /全屏函数,实现全屏播放视频的功能m_ActiveMovie.Pause(; /暂停播放m_ActiveMovie.SetFullScreenMode(true; /设置全屏播放属性为真,即开启全屏播放m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED; /设置播放窗口大小为最大m_ActiveMovie.Run(; /继续播放(5)查询歌曲代码如下:void CActiveMovie3:OnChaxun( CSongSet cSet;UpdateDa

42、ta(;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 =c

43、Set.m_ZuoQu;dlg.m_Zhuanji =cSet.m_ZhuanJi;dlg.DoModal(;UpdateData(FALSE;/自动更新表单中控件显示的内容 elseMessageBox("没有查到你要找的歌曲记录!"if(cSet.IsOpen(cSet.Close(;(6)添加歌曲void CActiveMovie3:OnTianjia( / TODO: Add your control notification handler code hereCSongDlg dlg;CSongSet pSet;if(dlg.DoModal(=IDOKpSet.O

44、pen(;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秒isR

45、epeat=TRUE; /将循环变量设为TURESetDlgItemText(IDC_STATIC2,"模式:循环" /将静态文本显示为循环模式 elseKillTimer(1; /停止标志为1的循环isRepeat=FALSE; /将循环变量设为FALSESetDlgItemText(IDC_STATIC2,"模式:普通" /将静态文本显示为普通模式4.6.3 处理“暂停”按钮单击“暂停”按钮后,在OnButtonPause(函数中,首先通过调用MCIMP3类的MCIPause(函数暂停正在播放的歌曲,然后调用DisplayInfo(函数在Static

46、 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(函数停止正在播放的

47、歌曲,然后调用DisplayInfo(函数在Static Text控件上显示“停止播放歌曲(文件名)”,将停止正在播放歌曲,利用GetDlgItem(函数设置“暂停”按钮和“停止”按钮不可用。void CActiveMovie3:OnStop( /停止播放函数KillTimer(1; /停止循环m_ActiveMovie.Stop(; /停止播放void CActiveMovie3:OnPause( /暂停播放函数m_ActiveMovie.Pause(; /调用控件的暂停函数暂停播放4.6.5 处理“退出”按钮单击“退出”按钮后,在OnButtonQuit(函数中,调用CDialog类的On

48、Cancel(函数将退出对话框,结束程序的运行。单击Resource View面板,选择Dialog选项,添加一个新的对话框,命名为IDD_IDD_PLAYER_DIALOG,该对话框隶属于类CPlayerDlg。向新对话框中添加新的控件,各控件属性如表4-6所示。表4-6 对话框IDD_PLAYER_DIALOG的控件资源标识类型相关属性及功能说明IDC_PLAYPush Button播放歌曲IDC_STOPPush Button停止播放歌曲IDC_OPENPush Button打开文件对话框IDC_RPPush Button录制某段音频IDC_PERPush Button播放上一首歌曲ID

49、C_NEXTPush Button播放下一首歌曲IDC_POPPush Button弹出存放待播放文件的列表IDC_SDELPush Button删除某首文件IDC_BEXITPush Button退出程序IDC_BHELPPush Button帮助文件IDC_BMIMPush Button托盘管理IDC_SLIDERSlider音频文件播放进度IDC_LISTList Box存放待播放文件的列表用ClassWizard给对话框IDD_PLAYER_DIALOG对应的CPlayerDlg类添加成员变量,创建好数据成员变量后就能够很容易的访问控件对象。增加的数据成员变量如表4-7所示。表4-7

50、对话框IDD_PLAYER_DIALOG的成员变量资源标识类型成员变量IDC_PLAYCButtonM_playIDC_STOPCButtonM_stopIDC_OPENCButtonM_openIDC_RPCButtonM_rpIDC_PERCButtonM_perIDC_NEXTCButtonM_nextIDC_POPCButtonM_popIDC_SDELCButtonM_sdelIDC_BEXITCButtonM_bexitIDC_BHELPCButtonM_bhelpIDC_BMIMCButtonM_bmimIDC_SLIDERCSliderCtrlM_slIDC_LISTCList

51、BoxM_list添加主对话框和各个控件的图片。界面的实现是通过编程将不同的Bitmap图片覆盖到对应的主对话框及控件上。因此,需要在Resource资源中添加Bitmap图片。单击Resource View面板,右击Player Resources项,在弹出的菜单中选择Insert,添加新的Bitmap内容。右击Bitmap,在弹出的菜单中选择Insert,向工程中添加与控件相对应的图标。各图标及其对应的控件如表4-8所示。表4-8 对话框IDD_PLAYER_DIALOG各控件对应的图标图标类型说明IDB_BITMAPPLAY1IDC_PLAY鼠标未单击控件IDB_BITMAPPLAY3I

52、DC_PLAY鼠标单击控件IDB_BITMAPPAUSEIDC_PLAY暂停播放IDB_BITMAPSTOP1IDC_STOP鼠标未单击控件IDB_BITMAPSTOP3IDC_STOP鼠标单击控件IDB_BITMAPOPEN1IDC_OPEN鼠标未单击控件IDB_BITMAPOPEN3IDC_OPEN鼠标单击控件IDB_BITMAPRP1IDC_RP鼠标未单击控件IDB_BITMAPRP2IDC_RP鼠标单击控件IDB_BITMAPPER1IDC_PER鼠标未单击控件IDB_BITMAPPER2IDC_PER鼠标单击控件IDB_BITMAPNEXT1IDC_NEXT鼠标未单击控件IDB_BI

53、TMAPNEXT2IDC_NEXT鼠标单击控件IDB_BITMAPAIDC_POPList Box控件未展开,鼠标未单击IDB_BITMAPBIDC_POPList Box控件未展开,鼠标单击IDB_BITMAPCIDC_POPList Box控件已展开,鼠标未单击IDB_BITMAPDIDC_POPList Box控件已展开,鼠标单击IDB_BITMAPDEL1IDC_SDEL鼠标未单击控件IDB_BITMAPDEL2IDC_SDEL鼠标单击控件IDB_BITMAPEXIT1IDC_BEXIT鼠标未单击控件IDB_BITMAPEXIT2IDC_BEXIT鼠标单击控件IDB_BITMAPHEL

54、P1IDC_BHELP鼠标未单击控件IDB_BITMAPHELP2IDC_BHELP鼠标单击控件IDB_BITMAPMIM1IDC_BMIM鼠标未单击控件IDB_BITMAPMIM2IDC_BMIM鼠标单击控件IDB_BITMAPBGIDD_PLAYER_DIALOGList Box未展开时的界面背景IDB_BITMAPBG1IDD_PLAYER_DIALOGList Box展开时的界面背景应用程序界面中,要使控件表面可以画上Bitmap,就必须使控件成为CBitMapButton类,因此,在PlayerDlg.h中对各个控件所属类加以修改并声明,如下表4-9所示。表4-9 对话框IDD_MCISAMPLE_DIALOG的消息函数控件变量原来属的类修改后所属的类M_playCButtonCBitmapButtonM_stopCButtonCBitmapButtonM_openCButtonCBitmapButtonM_rpCButtonCBitmapButtonM_perCButtonCBitmapButton

温馨提示

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

评论

0/150

提交评论