基于ActiveMovie组件的多媒体播放器的实现(DOC毕业设计论文).doc_第1页
基于ActiveMovie组件的多媒体播放器的实现(DOC毕业设计论文).doc_第2页
基于ActiveMovie组件的多媒体播放器的实现(DOC毕业设计论文).doc_第3页
基于ActiveMovie组件的多媒体播放器的实现(DOC毕业设计论文).doc_第4页
基于ActiveMovie组件的多媒体播放器的实现(DOC毕业设计论文).doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

基于ActiveMovie组件的多媒体播放器的实现 Implementation of a Multimedia Player Based on ActiveMovie Components 目 录摘 要IABSTRACTII第1章 绪论11.1 多媒体的定义11.2 多媒体技术的发展现状2第2章 开发环境和相关技术介绍32.1 系统开发环境32.2 相关开发技术3第3章 系统需求分析53.1 系统界面需求53.2 系统功能需求5第4章 系统概要设计74.1 系统整体结构74.2 系统功能流程8第5章 系统详细设计与编码实现95.1 接口模块区95.1.1 Windows API模块95.1.2 基本播放处理模块125.2 功能窗体区155.2.1 主播放窗体155.2.2 媒体列表窗体185.2.3 歌词显示窗体19结 论21参考文献22摘 要多媒体技术是当今信息技术领域发展最快、最活跃的技术,是当前人们关注的热点技术之一,是新一代电子技术发展和竞争的焦点。与多媒体技术发展密切相关的就是多媒体播放平台,它是多媒体技术的一个重要的分支,是人们畅游媒体信息世界的主要渠道。本文实现了一个基于ActiveMovie组件的多媒体播放器。主要实现的功能包括:支持目前多数格式的媒体文件,基本的播放控制功能,支持多媒体播放列表,同步歌词显示,曲目信息显示等。该系统是在Visual Studio 6.0开发平台上开发的,是基于Visual Basic语言编写的。关键词 多媒体技术,播放平台,组件,接口函数ABSTRACTMultimedia technology is the fastest-growing and the most active technology in the field of information technology. It is one of the hot technologies which people concern and is also the focus of the new generation of electronic technology development and competition. Multimedia player which is closely related to the multimedia technology development is an important branch of the multimedia technology and the main channels in which people enjoy the media information.In this paper, a multimedia player based on ActiveMovie components is implemented. The main implemented functions of the multimedia player are: lots of multimedia file types, fundamental playing control functions, multimedia playing list, synchronic showing lyric, song information showing, etc.The development is based on Visual Studio 6.0 platform. The language is Visual Basic.Keywords Multimedia Technology,Broadcast platform,Components,API第1章 绪论多媒体技术的快速发展使人们再次领略到计算机技术的巨大魅力,它大大地拓展了计算机的应用领域,使计算机从办公室、实验室等狭小的领域空间走向平民大众,成为信息社会的普通应用工具,广泛地充斥着社会生产生活的每一个角落。在这一进程中,多媒体播放平台功不可没,借助高速发展的互联网络,各式各样的媒体播放器将多媒体的概念带进了人们的感官世界,潜移默化的影响着人们的生产和生活。1.1 多媒体的定义多媒体是融合两种或者两种以上媒体的一种人-机交互式信息交流和传播媒体,使用的媒体包括文字、图形、图像、声音、动画和电视图像等。它是一门综合技术,所以又称之为多媒体技术。多媒体技术的概念起源于20世纪80年代初期,真正的发展是在90年代。多媒体是在计算机技术、通讯网络技术、大众传媒技术等现代信息技术不断进步的条件下,由多个学科不断融合,相互促进而产生出来的,它是信息技术应用发展的必然。进入90年代,由于“信息高速公路”计划的兴起、互联网络的广泛应用,大大刺激了多媒体信息产业的发展,在全球掀起一股家电行业、有线电视网络、娱乐行业、计算机工业及通讯行业相互兼并、联合组网的浪潮,人们开始步入真正的“多媒体时代”。相关行业的大规模兼并联合,大造了新一代的信息领域,产生了崭新的信息社会概念,同时也创造了无穷的机遇和潜在的巨大的市场空间。之后伴随着计算机网络、数字电视技术和通讯技术的快速发展,信息技术领域中的多媒体技术成为新一代电子技术发展和竞争的聚焦点。1.2 多媒体技术的发展现状多媒体技术的交互性向用户提供更加有效的控制和使用信息的手段。而多媒体播放平台则是交互这一特性实现的一种重要的途径。播放平台是多媒体技术应用的重要部分,是多媒体技术的展示舞台,是人们走进多媒体世界的主要桥梁。各式各样的媒体播放器将人们与多媒体联系的日益紧密,使多媒体技术真正地走向大众化。伴随着多媒体技术的快速发展,各式各样的多媒体播放器也应运而生。现存的主流播放器大致可以分为两大类视频播放器和音频播放器。这里是从用户的使用习惯去划分的,实际上很多播放器都可以支持大多的媒体格式,它们不仅仅支持音频的播放、还支持视频的播放。但因设计的侧重点不同,用户对它们使用的也存在差异,比如说TTPlayer可用来进行音频播放,它以其小巧方便、外观漂亮等特点成为很多用户播放音频的不二之选,它同样支持视频的处理,但却没有图像显示,这里可以看得出开发者对它的设计定位;MPC(Media Player Classic)常被用来播放视频,它几乎支持所有的媒体格式,播放视频尤为快捷方便,因此成为很多用户播放视频的首选,但却很少被用来播放音频。这就是播放器设计定位的不同对用户使用习惯的影响,也是用户不同使用需求的必然所致。本播放系统的开发正是基于以上的考虑和分析去进行的,力图在音频播放和视频播放上都去竭力满足用户使用的需求,力求兼顾当前主流播放器在音频播放和视频播放方面的各自优点,力保在使用上去迎合用户的习惯。第2章 开发环境和相关技术介绍系统的开发离不开对开发环境的了解和对相应开发技术的学习,开发环境是实现系统开发的前提,开发技术则是实现系统功能的根本。下面将分两节介绍本系统的开发环境和主要的开发技术。2.1 系统开发环境本系统是在Microsoft Windows NT操作系统上采用VB6.0开发平台进行开发的,使用的语言是Visual Basic(以下简称VB)。之所以采用VB6.0开发平台,主要是考虑该平台开发应用程序的便捷性、高效性。VB6.0强大的图形图象处理技术、文件处理技术、多媒体处理技术、SDI和MDI等窗体编程技巧、方便的Windows API函数使用,使它成为开发Windows应用程序的主要选择之一。VB6.0开发平台是Microsoft公司推出的可视化开发工具,利用VB6.0可以开发基于Windows平台的应用程序,依靠强大的编译器及网络与数据库的开发能力,用VB6.0可以开发出功能强大的应用程序。VB继承了Basic语言的简单、高效、代码结构清晰、可读性好、并且容入了面向对象、可视化、事件驱动等软件开发技术,使Basic语言编程发展到了一个新的高度。VB6.0以其简单易用、功能强大、开发效率高的显著特点,得到众多程序员的青睐,在众多开发平台中占据着重要的地位。2.2 相关开发技术本系统的核心功能是基于Quartz.dll、Msxml3.dll等Windows系统组件实现的。在WindowsSystem32下可找到一个动态链接库Quartz.dll,这是Windows中提供的用于控制运动图像播放的一个类型库,只要在VB的“工程-引用”菜单中将它添加“ActiveMovie Control Type Library”即可。该库中定义了IBasicAudio,IBasicVideo和IBasicVideo2,IMediaEvent,IMediaEventEx和IMediaPosition等类。可在相关控件的Click等事件中添加代码设置和Audio的相关值,设置或读取Video的输入输出源的相关参数;可以直接调用无参函数Run、Pause、Stop的控制播放事件进程;利用IMediaPosition类对具体播放细节进行操作。XML可扩展标记语言(Extensible Markup language)万维网协会(W3C)推荐的一个开放标准,它是构造Web上的文档和数据通用格式。XML在Windows项目开发中有着举足轻重的重要地位,主要是用来存储项目关键的信息,类似于数据库系统,但是从应用来讲确是更加的灵活、方便。VB中操作XML文档,必须要导入WindowsSystem32下的动态链接库Msxml3.dll,该系统组件主要提供XML文档的操作和使用接口。如何添加引用动态链接库如图2-1所示。图2-1 添加系统引用示例图XML文档最主要的操作是对文档节点的操作。读取操作是最基本、最常用的操作,通常是声明一个DOMDocument对象,然后通过Lode函数加载的相应XML文档,再由DOMDocument对象获取文档根节点,再通过根节点去获取其子节点,由子节点获取其节点值或属性值,整个读取过程就是树的遍历,可以根据不同的需要采用不同的遍历方式。 第3章 系统需求分析需求分析是对用户需求的真正明确,是对要解决的问题的全面理解,它是界于系统分析和软件设计阶段的重要桥梁。本章将从界面和功能两个方面的需求来进行分析。3.1 系统界面需求随着多媒体播放软件的发展,用户对播放软件界面提出了更高的要求。用户对界面的需求不仅仅再局限于简洁、易操作等特点,还更加倾向于美观、人性化、个性化等要求。本系统基于以上需求做出以下分析: 1、能够多窗口显示,用户可以根据自己的需要关闭不使用的窗口,这样可以有效地节省界面空间,从而使界面显得小巧玲珑、简洁、美观。2、能够更换界面风格,用户可以根据自己的习惯更换个性化的界面风格,从而使界面显示风格多样化,更能满足不同用户的需要。3、能够变换显示模式,显示模式包括普通显示、迷你显示、最小化显示。普通显示是正常的显示状态,迷你显示更小巧简洁的显示,最小化显示是系统任务栏显示。3.2 系统功能需求依据当前的多媒体播放的主流需求,本系统首先要考虑以下基本功能需求:1、首先能够播放当前的大多数格式的媒体文件,主要包括MP3、WMA、AVI、MEPG、RMVB等格式文件。2、能够进行基本的播放控制,播放控制包括“进度控制”、“音量控制”、“播放状态控制”(静音、暂停、停止)、“曲目选择”、“更改播放模式”(包括单曲播放、单曲循环、顺序播放、循环播放、随机播放五种模式)等基本操作。3、要支持媒体列表的播放,能够进行基本的列表操作,包括“新建列表”、“删除列表”、“重命名列表”、“添加媒体文件至列表”、“从列表删除媒体文件”等操作,能够显示所有播放列表,能够显示当前选中列表的所有媒体文件。4、能够进行同步歌词显示,主要是音频文件歌词的同步显示。同步显示主要指歌词显示内容与音频播放进度保持同步。5、能够进行曲目信息显示,主要是MP3格式文件的曲目信息显示,通常包括歌手名、专辑名、发行时间等常用信息。第4章 系统概要设计概要设计是将系统需求转换为未来系统的设计,本章着重讲述了系统整体结构和功能流程设计。4.1 系统整体结构基于以上的需求分析可以将本播放系统大致分为五大功能区:功能窗体区、接口模块区、歌词资源区、播放列表区、皮肤文件区。系统结构示例图如图4-1所示。图4-1 系统结构图功能窗体区:存放所有的功能窗体,系统基本信息文件。接口模块区:存放Windows API接口成员,用户自定义接口成员,系统全局变量。歌词资源区:存放所有歌词文件。播放列表区:存放所有歌曲列表。皮肤文件区:存放所有窗体皮肤文件。功能窗体区是系统的核心,接口模块区是系统的底层,其他三块都可视为资源区,功能窗体区和接口模块区对资源去进行使用,从而实现更加完善的功能。功能窗体区主要是各个窗体具体功能的实现,接口模块区主要是公共功能的实现,功能窗体区通过调用接口模块区所提供的公共接口来实现相应的功能。功能窗体区是系统资源的主要调用者,是用户直接面向的区域模块,位于系统最上层。4.2 系统功能流程根据前阶段的需求分析和系统结构设计来进行系统功能流程的分析。系统总体功能流程为:启动播放器,加载基本状态信息,然后用加载的信息进行初始化设置,进行文件播放,播放过程中用户可以进行各种窗体操作,用户使用结束,执行关闭系统操作,系统退出前进行当前播放基本状态信息保存,保存成功后正常退出系统。图4-2 系统流程图系统总体功能流程如图4-2所示。加载基本状态信息:系统读取皮肤文件和系统配置文件,然后将读取的信息提交系统设置模块,设置模块再进行相关初始化设置。具体操作如图4-3所示。初始化设置:使用加载的信息设置系统皮肤、设置系统基本状态信息。设置皮肤是用读取的皮肤文件信息来设置窗体和窗体元素的图片、坐标位置。设置基本状态信息包括窗体显示设置(包括播放列表和歌词显示窗体)、播放列表设置(设置所要播放的播放列表)、播放文件设置(设置所要播放的播放文件)、播放音量设置、播放模式设置(普通模式、迷你模式、最小化模式)、静音状态设置。主窗体操作:包括播放系统的所有操作,包括播放控制操作、显示模式操作、皮肤选择操作等。图4-3 加载系统基本状态信息数据流图第5章 系统详细设计与编码实现依据以上章节的需求分析和概要设计我们了解到系统包含五大模块。各种功能的实现都是基于这五个模块的,所以本章节主要通过系统的这几个功能模块来介绍系统的详细设计及编码实现,其中功能窗体区和接口模块区是描述的重点。5.1 接口模块区接口模块是整个多媒体播放系统的基础,它提供了公共功能实现的主要程序接口。系统又把该模块细分为两个子模块Windows API模块和基本播放处理模块。 5.1.1 Windows API模块该子模块用来声明系统所要使用的Windows API函数,声明之后系统就可以直接使用。下面介绍一下本系统所使用的部分API函数和使用他们的设计考虑:1、窗体默认情况下是以矩形显示的,为了使窗体显示更加新颖、美观,可以使用系统提供的接口函数对窗体进行切割处理,从而显示出设计者或用户所追求的种种效果。本系统将把所有主要显示窗体统一切割为圆角矩形,主要使用的是CreateRoundRectRgn函数。下面是相关函数的介绍和使用。Function CreateRoundRectRgn Lib gdi32 (ByVal x1 As Long, ByVal y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long该函数主要功能:用来创建一个圆角矩形,该矩形由(X1,Y1)-(X2,Y2)确定,(X3,Y3)用来确定的椭圆描述圆角弧度。返回值类型也为long,执行成功则为区域句柄,失败则为零。Function SetWindowRgn Lib user32 (ByVal hwnd As Long,ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long该函数主要功能:允许您改变窗口的区域。通常所有窗口都是矩形的,窗口一旦存在就含有一个矩形区域。本函数允许您放弃该区域。这意味着您可以创建圆的、星形的窗口,也可以将它分为两个或许多部分,实际上可以是任何的形状。Hwnd:要设置区域的窗口;hRgn:将要设置的区域句柄,一旦设置了该区域,就不能使用或修改该区域句柄,也不要删除它;bRedraw:若为TRUE,则立即重画窗口。SetWindowRgn可与CreateEllipticRgn、CreateRoundRectRgn函数结合使用,用来进行窗体切割,使窗体只显示创建区域部分的内容,具体主要操作如下:HRgn_Lng = CreateRoundRectRgn(x1, y1, X2, Y2, radius, radius)/设置窗口区域SetWindowRgn formName.hwnd, HRgn_Lng, True窗体切割前后效果对比如图4-1和图4-2所示。图5-1 媒体列表窗体切割前效果图 图5-2 媒体列表窗体切割后效果图2、为了方便用户使用,要求点击窗体任何“不触发事件”的区域实现窗体随鼠标拖动。要实现此种操作,就必须时时向窗体发送消息,从而实现窗体移动。这里就需要使用SendMessage函数。为窗体注册鼠标单击触发事件,在触发函数中向窗体发送消息。Function SendMessage Lib user32 Alias SendMessageA (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long该函数主要功能:该函数将指定的消息发送到一个或多个窗口,为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。hWnd:将接收消息的窗口句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。返回值指定消息处理的结果,依赖于所发送的消息。wMsg:指定被发送的消息。wParam:指定附加的消息指定信息。IParam:指定附加的消息指定信息。本系统用此函数来实现用鼠标拖动窗体,详细实现如下:Public Const WM_NCLBUTTONDOWN = &HA1 Public Const HTCAPTION = 2/设置消息常量值SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& /Me指本窗体3、应用程序最常用的基本操作之一就包括最小化系统托盘显示,单击最小化按扭,系统图标将出现在系统托盘区域,双击托盘中的图标,系统还原显示。此功能的实现主要用到Shell_NotifyIcon函数,最小化时,系统主窗体隐藏,托盘区域添加该系统图标;双击系统图标,主窗体显示,通知托盘删除该系统图标。Function Shell_NotifyIcon Lib shell32.dll (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long该函数主要功能:用来添加、删除、更改系统托盘区(taskbar status area)的图标。dwMessage:为消息设置值,它可以是以下的常数值:0、1、2;NIM_ADD = 0 /加入图标到系统状态栏中NIM_MODIFY = 1 /修改系统状态栏中的图标NIM_DELETE = 2 /删除系统状态栏中的图标LpData:用以传入NOTIFYICONDATA数据结构变量,其结构如下所示:Type NOTIFYICONDATA cbSize As Long /需填入NOTIFYICONDATA数据结构的长度 HWnd As Long /设置成窗口的句柄 Uid As Long /为图标所设置的ID值 UFlags As Long /设置uCallbackMessage,hIcon,szTip是否有效 UCallbackMessage As Long /消息编号 HIcon As Long /显示在状态栏上的图标 SzTip As String * 64/提示信息End Type5.1.2 基本播放处理模块该模块主要是用户自定义的接口成员,是基层的功能函数接口,供上层模块使用。下面介绍本系统主要的函数接口:1、窗体没有修饰将会十分难看,现在常用的操作是窗体加上一层皮肤。对窗体来说,皮肤就是皮肤文件,它由一组图片和包含图片信息的XML文件组成。加载皮肤就是通过读取皮肤XML文件来设置窗体元素的图片属性。其核心处理就是读取皮肤XML文件,loadXmlSkin为该处理的关键函数。Function loadXmlSkin(strSkin As String) Global root As IXMLDOMElement加载皮肤文件接口,供上层窗体绑定窗体皮肤元素,主要是对XML的操作,参数为皮肤文件路径;root是全局变量,存储XML根接点对象,实现如下:Set skinXml = New DOMDocumentCall skinXml.Load(“皮肤文件路径”)Set root = skinXml.documentElement/获取根接点对象,使用根接点可遍历所有接点。2、播放器启动后,需要加载系统的基本状态。这对于用户来说是一个很实用的操作,用户有用户的使用习惯,每次关闭系统,系统都将保存本次播放的状态信息(当前播放的列表、曲目、播放模式、显示模式、显示状态等等),下次启动系统自动加载上次的状态信息,这是一个较为人性化的设计。状态信息存储在系统设置XML文件里面,通过loadPlayerSettings函数进行读取。Public Sub loadPlayerSettings(node As IXMLDOMNode)加载播放器基本设置信息:歌词窗体显示状态、播放列表窗体显示状态、播放模式、上次播放记录(播放列表和播放曲目的记录)、静音状态、显示模式等。Dim childNode As IXMLDOMNodeFor Each childNode In node.childNodes /遍历根接点所有子接点 Select Case childNode.nodeName /设置操作 End SelectNext3、媒体列表播放主要是通过读取列表文件中媒体文件的物理路径进行播放,得到文件物理路径实现的关键所在。Public Function getFilePath(strFileList As String, index As Integer) As String通过播放列表名和文件位置获取播放列表中该文件的物理路径,函数返回值为该文件的物理路径,具体实现如下:Open “媒体列表” For Input Lock Write As #1 Do While Not EOF(1) /循环至文件尾。 If num = index Then Line Input #1, “播放文件路径”/读入一行数据并将其赋予某变量。 GoTo nextStep Else num = num + 1 Line Input #1, textLine End If LoopClose #14、MP3是目前使用最为广泛的媒体格式之一,也是本系统最主要支持的格式。读取MP3文件信息可以使用户直接的了解文件的相关说明信息。MP3文件由一系列长度不同的祯组成,在MP3文件的开始或结尾,通常会存储一些额外的信息,如歌手,曲木目名等等,这些叫做“ID3”数据。Public Function GetMp3Tag(FName As String) As mp3Tag获取MP3格式的文件信息,FName为MP3文件的物理路径,返回值为自定义的结构类型,该结构类型用来存储MP3文件的信息,其定义如下:Public Type mp3Tag Artist As String /存储歌手信息 Album As String /存储唱片专辑信息 Title As String /存储标题信息 Year As String /存储年代信息 Comments As String /存储备注信息 Genre As Integer /存储音乐风格序列End TypeGlobal mp3Infor As mp3Tag /声明一个该结构变量具体获取文件信息的方式如下:Open “文件路径” For Binary Access Read As FileNum/以二进制形式打开文件Seek FileNum, LOF(FileNum) - 127 /把文件指针移动到MP3信息处strInput = Space(3)Get FileNum, , strInputIf strInput TAG Then /如果没有发现信息标识,就关闭文件 Close FileNum exitEnd IfstrInput = Space(30)Get FileNum, , strInputTitle = Trim(strInput) /读取文件详细信息Close FileNum5、如前面所提到的,退出系统时需要保存当前系统状态信息,这里用saveSettings函数实现。Public Sub saveSettings()退出播放系统时,保存本次播放的基本状态信息,供下次使用系统时加载使用,这个函数没有什么核心内容,主要逐个获取状态信息,调用函数editNodeValue进行保存。Private Sub editNodeValue(strNodeName As String, node As IXMLDOMNode, strTemp As String, strPSXML As String)在node节点下保存系统状态信息,若存在节点,更新其值即可;若不存在,在node节点下新建节点进行赋值,保存退出即可。strNodeName为状态信息节点名,strTemp为节点值,strPSXML为XML文件物理路径。该函数核心实现如下:If node.selectSingleNode(strNodeName) Is Nothing Then/若不存在,新建节点赋值保存 Dim newNode As IXMLDOMNodeSet newNode = node.ownerDocument.createElement(strNodeName) node.appendChild newNode Set newAttribute = node.selectSingleNode(strNodeName).ownerDocument.createAttribute(value) newAttribute.Text = strTemp newNode.Attributes.setNamedItem (newAttribute) node.ownerDocument.save strPSXMLElse node.selectSingleNode(strNodeName).Attributes.getNamedItem(value).Text = strTemp node.ownerDocument.save strPSXMLEnd If6、系统函数入口是系统运行的根基点,系统运行首先运行入口函数。Public Sub Main()主函数入口:加载皮肤、加载系统基本信息、系统基本设置、启动播放。具体实现如下:Call loadXmlSkin(orange) /加载皮肤文件On Error GoTo errorSet mpXml = New DOMDocumentCall mpXml.Load(App.Path & & playerSettings.xml)/加载系统基本状态信息文件Dim root As IXMLDOMElement /XML文件根节点Set root = mpXml.documentElement /根节点赋值Dim node As IXMLDOMNode /定义子节点For Each node In root.childNodes /循环读取各个子节点进行状态设置 Select Case node.nodeName Case Player /设置状态信息操作 End SelectNext MediaPlayer.playLastFilePath(filePath)/启动播放5.2 功能窗体区功能窗体模块包含五个窗体:主播放窗体、媒体列表窗体、歌词显示窗体、迷你播放窗体、媒体文件信息窗体。对于迷你播放窗体,其主要功能都是通过调用主播放窗体公共接口实现的,而媒体文件信息窗体是调用接口功能模块公共成员实现的,所以均不加介绍。下面主要结合其他三个主要窗体主要功能的设计与实现进行论述。5.2.1 主播放窗体如前面的介绍,主要进行各种播放控制,其主要的功能实现有以下几点:1、打开文件播放,使用的是CommonDialog控件,该控件在 Visual Basic 和 Microsoft Windows 动态连接库Commdlg.dll 例程之间提供了接口。为了用该控件创建对话框,必须要求Commdlg.dll 在 Microsoft Windows System 目录下。为了在应用程序中使用 CommonDialog 控件,应将其添加到窗体上并设置属性。控件显示的对话由控件的方法决定。运行时,调用相应方法后将显示对话框或执行帮助引擎;设计时在窗体上将 CommonDialog 控件显示成一个图标,此图标的大小不能改变。CommonDialog 控件可以显示如下常用对话框:“打开”、“另存为”、“颜色”、“字体”、“打印”显示“打开”对话框有了“打开”对话框就可指定驱动器、目录、文件扩展名和文件名。“另存为”对话框在外观上与“打开”对话框相同,只是对话框的标题和文件名是暗淡的。运行时选定文件并关闭对话框后,可用 FileName 属性获取选定的文件名。要显示“打开”对话框(1) 指定在“文件类型”列表框中显示的文件过滤器列表。可用下列格式设置 Filter 属性:description1 | filter1 | description2 | filter2.Description 是列表框中显示的字符串例如,Text Files (*.txt)。Filter 是实际的文件过滤器例如,*.txt。每个description | filter 设置间必须用管道符号分隔 (|)。(2) 用 ShowOpen 方法显示对话框。选定文件后可用 FileName 属性获取选定文件的名称。对所有公共对话框,当 CancelError 属性为 True,而且用户单击了对话框的“取消”按钮时将生成一个错误。在显示对话框时捕获错误,以此检测是否按了“取消”按钮。系统中具体实现如下所示:cdOpenFile.InitDir = 初始化路径cdOpenFile.Flags = cdlOFNFileMustExist /设置对话框模式cdOpenFile.Filter = 全部媒体格式(*.*)|*.*cdOpenFile.FileName = cdOpenFile.DialogTitle = 多媒体文件cdOpenFile.ShowOpen /cdOpenFile为CommonDialog对象,此处用于选择文件。cdOpenFile.FileName /获取文件物理路径playMediaFile(cdOpenFile.FileName) /启动播放2、媒体播放时间显示,playerPos.Duration可获得媒体播放位置,Duration是一个Double型变量,需要将其转化为字符串进行显示,效果如图具体实现如下:strTime = Format(CStr(doubleTime 60), #00) & : & Format(CStr(doubleTime Mod 60), 00)Format(expression, format, firstdayofweek, firstweekofyear)Expression 必要参数,任何有效的表达式。Format 可选参数。有效的命名表达式或用户自定义格式表达式。Firstdayofweek 可选参数,常数,表示一星期的第一天。Firstweekofyear可选参数,常数,表示一年的第一周。Format(CStr(doubleTime 60), #00)/分钟转换Format(CStr(doubleTime Mod 60), 00)/秒转换3、进度条是用程序控制实现的,进度条的使用分为两种情况:(1)播放进度控制进度条显示、(2)进度条操作控制播放进度。本系统未采用任何第三方进度条控件,而是通过控制图片显示来实现的。这里需要两张图片:一张为背景图片、一张为滑块图片,控制滑块图片在背景图片上移动。播放进度控制进度条显示:通过获取当前媒体播放的位置来设置滑块图片的位置。thumb.Left = thumb.Left + moveLength/ moveLength为滑块需要移动的距离进度条操作控制播放进度:通过滑块位置和进度条长度(即进度条背景图片的宽度)设置媒体的播放位置。playerPos.CurrentPosition = (X / progress.Width) * mediaLength/X为鼠标单击位置的横坐标(相对于进度条背景图片的位置),X / progress.Width为当前进度占总进度的百分比。整个实现就是获取并设置媒体的播放位置。thumb.Left = X + progress.Left/设置滑块位置。4、音量控制的实现与进度控制的实现思想一致,这里不在赘述。5.2.2 媒体列表窗体播放列表窗体主要是播放列表的相关操作,主要列举以下功能的实现:1、随机播放实现,即随机播放播放列表的媒体文件,具体实现如下:RandomizeplListCount = playlistWindow.mediaFiles.ListCount/获取播放列表的曲目数randomNum = Int(plListCount * Rnd) + 0)/生成 0 到 plListCount-1之间的随机数值playlistWindow.mediaFiles.ListIndex = randomNum然后通过播放列表窗体获取当前选中的文件进行播放。2、由播放列表绑定文件列表,即读取播放列表文件,逐行读取每行绑定文件列表进行显示:Open 播放列表名 For Input Lock Write As #1 /打开列表文件Do While Not EOF(1) /循环至文件尾。 Line Input #1, textLine /读入一行数据并将其赋予某变量。 textLine = Mid(textLine, InStrRev(textLine, ) + 1)/截取播放列表中物理路径中的文件名 playlistWindow.mediaFiles.AddItem textLine /添加至列表playlistWindow.mediaFiles.ItemData(playlistWindow.mediaFiles.NewIndex) = playlistWindow.mediaFiles.ListCount 1/设置该文件在播放列表中的位置(即所在行),方便获取物理路径。LoopClose #13、设置窗体控件位置及显示大小:加载皮肤文件,主要是加载窗体图片信息及控件显示坐标、大小信息,加载后初始化窗体进行设置: Dim strPosition As String strPosition = node.Attributes.getNamedItem(position).Text/获取位置信息,包含距左、距上距离及宽高信息 Call slipStr(strPosition)/提取位置信息中的左上宽高信息存至winPosition(4)中。 Call setPlayerConPos(player) /进行控件设置 With player /设置控件位置的具体实现:.Left = winPosition(0) * Screen.TwipsPerPixelX.Top = winPosition(1) * Screen.TwipsPerPixelY.Width = winPosition(2) * Screen.TwipsPerPixelX.Height = winPosition(3) * Screen.TwipsPerPixelYEnd With4、文件重命名:本系统用到的是重命名播放列表名,具体处理思路如下:OldName = App.Path & playList & oldFileListName & .m3u: NewName = App.Path & playList & newFileListName & .m3uName OldName As NewName /重命名文件5.2.3 歌词显示窗体1、读取歌词文件绑定于歌词列表,具体实现如下:歌词文件格式为:00:22.43徘徊过多少橱窗,00:22.43为显示后面歌词的时间,故采用以下处理:Line Input #1, textLine /读入一行数据并将其赋予某变量。strPlayTime = Trim(Mid(textLine, 1, InStrRev(textLine, )/获取显示时间:如“00:22.43”textLine = Trim(Mid(textLine, InStrRev(textLine, ) + 1)/获取显示时间的歌词:如“徘徊过多少橱窗”lyricListBox.AddItem textLine /添加至歌词列表显示若一个多个时间点对应一句歌词,如下形式:“03:52.0203:31.6402:07.96吞风吻雨葬落日未曾彷徨”处理稍微麻烦,但原理基本一样,具体实现如下:While strPlayTime intTemp = InStr(1, strPlayTime, , 1) num = InStr(1, strPlayTime, :, 1) strTemp = Mid(strPlayTime, 2, num - 1) & Format(CStr(CInt(Mid(strPlayTime, num + 1, intTemp - 1 - num), 00)/获取一个时间单位,四舍五入秒后面的时间,如“03:31.64” 四舍五入为“03:32” strAllPlayTime = strAllPlayTime & strTemp & | & lyricListBox.ListCount - 1 & /设置一个所有播放时间字符串,一个时间点对应一个歌词列表下标,播放至该时间点时选中相应歌词显示。 strPlayTime = Trim(Mid(strPlayTime, intTemp + 1)Wend2、主播放窗体playTimer_Timer函数中进行歌词显示控制,具体实现如下:If InStr(1, strAllPlayTime, leaPlayLen.Caption, 1) 0 Then/若当前播放时间在所有播放时间字符串中,则控制歌词显示intNum = InStr(InStr(1, strAllPlayTime, leaPlayLen.Caption, 1), strAllPlayTime, |, 1) showLyric.lyricListBox.ListIndex = CInt(Mid(strAllPlayTime, intNum + 1, InStr(intNum, strAllPlayTime,

温馨提示

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

评论

0/150

提交评论