vc音乐播放器课程设计报告.doc_第1页
vc音乐播放器课程设计报告.doc_第2页
vc音乐播放器课程设计报告.doc_第3页
vc音乐播放器课程设计报告.doc_第4页
vc音乐播放器课程设计报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

音乐播放器19120104 王萌萌音乐播放器是一种用于播放各种音乐文件的播放软件。他可以播放各种格式的音频文件,如MP3、Wma、Video、Wave、AVI等。本音乐播放器设计的技术点如下:1、 利用GDI技术绘制音乐信息。2、 通过不规则按钮美化界面。3、 通过Active Movie Control Object 空间播放音乐。第一部分 界面实现简介要实现音乐播放器,在软件界面上要实现多种功能,包括打开(Open)、播放(Play)、暂停(Pause)、停止(Stop)、关闭(Close)、退出(Exit)、音量控制(Volume)、循环(Repeat)等。功能总述如下图所示:功能总述音乐信息时间信息状态信息播放进度文件名称音量控制循环播放停止播放暂停播放播放音乐打开音乐播放操作状态提示最小化到托盘区界面实现如下图所示:1、1打开音乐文件在播放器上单击Open按钮,弹出“打开”对话框。根据将要打开的音频文件类型选择过滤器,找到相应文件的路径后便可以将制定音频文件打开,如下图所示:将选中的音频文件打开后,该文件的名称及当前状态将会显示在界面上,如下图所示:1、2播放音乐的功能当打开后,播放器处于停止播放的状态,音频文件的一些信息也没有完全显示出来。当用户单击Play按钮后,播放器将播放刚刚打开的音频文件,并修改当前的状态,将音频文件的详细信息显示到界面上,进度条及播放时间根据播放进度同时进行状态更新。如图所示:1、3暂停播放的功能当播放器处于暂停状态时,单击界面上的Pause按钮可使播放器进入暂停状态。处于暂停状态的播放器记录着当前音频文件的播放进度,一旦用户再次单击Play按钮,播放器可以继续暂停前的播放状态,如图所示:1、4停止播放的功能无论是播放状态还是暂停状态,当用户单击Stop按钮时,播放器将进入停止播放状态,播放进度及时间回到初始状态,只有当用户再次单击Play按钮时,才可以重新播放音频文件,停止播放时,播放器的状态如图所示:1、5循环播放的功能当播放器处于非循环状态时,用户单击Stop按钮或者播放到最后,播放器都将进入停止播放状态,如图所示:而当用户单击Repeat按钮时,进入循环状态,单击Stop按钮或者播放到最后,播放器都将进入重新播放状态,如图所示:1、6调节音量大小在播放器的右侧,有一个滑块可以控制播放器声音的大小。向上可以放大播放器的播放声音,向下可以调小播放器的播放声音。1、7将播放器最小化到托盘区当用户需要让播放器在后台运行时,在界面上单击“最小化”按钮或者Hide按钮时,播放器都将最小化到托盘区。如图所示:当用户想显示主界面时,只需双击托盘中播放器的图标即可。1、8音频播放器的技术简介Active Movie Control Object控件是Visual C+自带的控件。它支持主流的媒体格式,通过调用Active Movie控件还可以支持更多的媒体类型。ActiveMovie控件是微软公司推出的用于多媒体程序设计的控件,它提供了非常完善的音频和视频媒体文件的回放功能,能支持多种文件格式,从最常见的WAV文件和AVI文件到使用MPEG压缩格式的VCD视频文件,都可以正常的进行播放。控件能根据文件后缀进行自动判别设备类型,并完成相应的控制。事实上,很多优秀的多媒体应用程序,其内部的多媒体回放就是利用ActiveMovie控件来实现。而且,在Windows 95/98和Windows NT的最新版本中,ActiveMovie控件已作为操作系统的一部分来提供,即使用户系统中没有安装ActiveMovie控件,Microsoft的许可协议也允许在你的应用程序的发行包中发布ActiveMovie的运行时文件。本次使用Visual C+ 6.0自带的ActiveX控件Active Movie Control Objec实现音频播放器的软件开发。第二部分 Slider控件本项目两次用到了Slider控件,一处是用于当前音频文件的播放进度;一出是用于音量调节。另外,为了美化界面,本实例用到了自定义的不规则按钮控件。在本部分,将详细说明这两种控件的实现及使用方法。与滚动条类似,滑块控件可选择一个范围。移动滑块时印发scroll事件,发生在click事件之前。在控件的value属性值变更之后引发的change事件,与scroll事件不同的是,scroll事件注重滑块移动,change注重value属性值改变。2、1用作标识进度的Slider控件(1) 拖放一个Slider可见到窗体上,利用向导为这个Slider控件添加一个CSliderCtrl型的变量m_slider;(2) 在窗体的初始化函数中设置Slider空间的范围,并定义一个定时器。(3) 定义一个整型变量m_value,用于记录并设置Slider的值。在对话框初始化函数中将其初始化为0.(4) 利用向导重载对话框的OnTimer(UINT nIDEvent)函数,让Slider自己动起来,当滑块的值大于其最大值100时,滑块回到初始位置0,。每次响应OnTimer(UINT nIDEvent)函数m_value的值加1,实现滑块自动移动。2、2调节音量的Slider控件(1) 拖放一个Slider可见到窗体上,修改其属性,将方位改成Vertical,勾选Tick Marks及Auto ticks,将P点改为Top/Left。(2) 为控件添加CSliderCtrl型的变量m_Slider,在对话框的初始化函数中设置Slider空间的范围及初始值。将Slider的范围设置为-200,初始值为-1.(3) 为Slider控件添加滑动事件函数OnVScroll(),当滑块滑动时触发此函数,在这个函数中仅仅将当前Slider空间的值输出,而在音量控制时要做稍微复杂点的操作,后面介绍。第三部分 定制不规则的按钮控件3、1自定义按钮类要实现一个新的按钮首先要先建一个类,继承于CButton。class CMybutton : public CButton;此类的主要功能是:按钮不同状态的创建函数;定义回执不规则按钮需要的全部变量;定义回执按钮的函数Drawbutton();定义准备按钮状态位图的函数PrepareStateBitmaps();定义检测按钮是否在按钮上、检测鼠标是否经过按钮及绘制按钮3D边框的3个函数;定义准备各种状态下按钮位图的函数;定义绘制按钮标题及按钮路径的函数;重载两个重要的函数DrawItem()及DefWindowProc();响应窗体的一些函数等。3、2自定义按钮的构造函数及析构函数的实现构造函数主要初始化不规则按钮的一些状态及所需要的变量,函数头如下:CMybutton:CMybutton()(1) 析构函数实现释放资源的功能,函数头如下:CMybutton:CMybutton()3、3创建不规则按钮的方法(1) Create()函数,仅仅制订了按钮的标题、样式 、在父窗口的坐标、路径、父窗口句柄及按钮控件的ID。函数头如下:BOOL CMybutton:Create(LPCTSTR lpszCaption, DWORD dwStyle, const CPoint point, const HRGN hRgn, CWnd* pParentWnd, UINT nID)(2) 指定选中态及悬挂态按钮背景颜色的Create()函数。它除了包含Create()函数的所有参数外,又增加了一个COLORREF型变量,用于指定选中态及悬挂态按钮背景颜色。函数头如下:BOOL CMybutton:Create(LPCTSTR lpszCaption, DWORD dwStyle, const CPoint point, const HRGN hRgn, CWnd* pParentWnd, UINT nID, COLORREF color)(3) 全参数的Create()函数,该函数指定定做不规则按钮所需的所有变量。函数头如下:BOOL CMybutton:Create(LPCTSTR lpszCaption, DWORD dwStyle, const CPoint point, const HRGN hRgn, CWnd* pParentWnd, UINT nID, UINT nBorder, COLORREF nColor, COLORREF sColor, COLORREF hColor, COLORREF dColor)3、4实现不规则按钮的几个重要方法为了实现不规则按钮的功能,需要重载两个函数:DrawItem() 及DefWindowProc()。(1) PreSubclassWindow()函数是一个CWnd类的对象,在Attach到一个Windows窗口句柄后调用的第一个函数。此处PreSubclassWindow()函数中通过调用ModifyStyle()函数来将窗体的属性改为自绘性质的按钮。函数头如下:void CMybutton:PreSubclassWindow()(2) OnDrowItem()函数用于父窗口处理子控件的自绘消息:OnDrowItem()是控件绘制自身的函数。此函数的主要功能是:获取主窗体的DC句柄;获取按钮的区域;为按钮准备状态位图;将按钮绘制到主窗体上。函数头如下:VoidCMybutton:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)3、5为不规则按钮添加背景图像函数PrepareStateBitmaps()为按钮准备状态下的位图资源,主要功能为:准备内存设备;调用各个状态位图准备函数;释放申请的内存设备资源;将准备按钮状态标识设为false。函数头如下:void CMybutton:PrepareStateBitmaps(CDC*pDC,CRect* pRect)3、6实现按钮的状态背景图像PaintRgn()函数将按钮的状态位图绘制到内存设备上,该函数主要功能是:为按钮准备状态位图;获取按钮的路径;用位图准备函数根据当前状态传递过来的颜色变量填充按钮的状态位图;调用DrawButtonCaption()函数绘制按钮的标题;调用PaintRgn3D()函数绘制按钮的3D边框;最后释放路径资源,并将原位图载入内存设备。函数头如下:void CMybutton:PaintRgn(CDC * pDC, CDC * pMemDC, CBitmap * pBitmap, COLORREF color, CRect * pRect, BOOL bEnabled, BOOL bSunken)3、7实现添加按钮标题及边框的功能在PaintRgn()函数中调用按钮标题的绘制函数DrawButtonCaption(),以及按钮3D边框的绘制函数PaintRgn3D()(1) 按钮标题的绘制函数DrawButtonCaption(),主要根据按钮的当前状态绘制按钮的标题。主要功能是:获取按钮父窗体的字体类型,并将这几种字体类型设置为当前设备的字体;计算按钮标题的输出位置;根据当前按钮状态绘制按钮的标题;函数头如下:void CMybutton:DrawButtonCaption(HDC hDC, CRect * pRect, BOOL bEnabled, BOOL bSunken) (2) 按钮3D边框的绘制函数PaintRgn3D()根据按钮的路径,未按钮绘制一个3D效果的边框。主要功能是:定义四种边框的颜色;根据当前的状态配置四种边框的颜色值;绘制宽度为2像素及1像素的边框。函数头如下:void CMybutton:FrameRgn3D(HDC hDC, const HRGN hRgn, BOOL bSunken)3、8实现绘制按钮的功能在DrowItem()函数的最后调用了按钮的绘制函数DrawButton(),在这个函数中实现了按钮的最终绘制功能,根据当前按钮的状态,采用双缓冲的方法将相应的按钮状态位图绘制到按钮上。函数头如下:void CMybutton:DrawButton(CDC * pDC, CRect * pRect, UINT state)3、9添加按钮的鼠标事件为按钮重载鼠标事件OnLButtonDown()、OnLButtonUp()及OnMouseMove()。根据鼠标的操作及当前按钮的状态,决定按钮的下一步状态。(1)OnLButtonDown()函数是鼠标左键按下时触发的函数,在这个函数里主要标识鼠标已经按下,并根据情况捕获鼠标。函数头如下:void CMybutton:OnLButtonDown(UINT nFlags, CPoint point) (2)OnLButtonUp()函数是鼠标左键抬起时触发的函数,在这个函数里主要标识鼠标已经抬起,并根据情况释放捕获的鼠标。函数头如下:void CMybutton:OnLButtonUp(UINT nFlags, CPoint point) (3)OnMouseMove()函数是鼠标移动时触发的函数,在这个函数中处理率鼠标移过按钮时,按钮做出的状态转换。函数头如下:void CMybutton:OnMouseMove(UINT nFlags, CPoint point) 3、10鼠标状态决断及点测试功能的实现鼠标状态决断函数CheckHover()主要根据鼠标当前的状态、位置,决定按钮的下一步状态。点测试函数HitTest()主要用于判断当前鼠标的位置。(1)CheckHover()函数主要决断鼠标的悬挂及鼠标的捕获状态。在鼠标左键抬起处理函数中调用本函数。函数头如下:void CMybutton:CheckHover(CPoint point)(2)HitTest()函数判断传入的点是否在按钮上。主要功能:获取按钮的路径;获取路径的边框;判断点是否在区域内及边框上;释放路径资源;返回判断的结果。函数头如下:BOOL CMybutton:HitTest(CPoint point)第四部分 实现音乐播放器的关键技术4、1 Active Movie Control Object控件(1) ActiveMovie的注册,由于VC+6.0集成开发环境中无法找到ActiveMovie3控件,因此首先注册。(2) ActiveMovie的属性及方法,由于比较多,不细说。详细见第一部分。4、2音乐播放器最小化到托盘区的实现方法Shell_NotifyIcon()函数负责向系统传递消息,以添加、修改、删除托盘区的图标。该函数返回一个布尔型的值,失败返回0。该函数有两个参数:dwMessage和pnid。(1) dwMessage:标识该函数的应用功能,是添加、修改还是删除托盘区的图标。如果添加,它的值是NIM_ADD;删除是NIM_SELETE;修改是NIM_MODIFY。(2) pnid:程序最小化到托盘区的图标信息结构体。第五部分 音乐播放器的界面设计5、1设计并载入播放器背景图像(1) 用photoshop为播放器设计一个背景图像,并载入工程。(2)在对话框初始化函数中载入背景位图资源,并将用这个位5、1创建一个基于对话框的工程,并为对话框添加控件,此处将ActiveMovie控件属性对话图资源初始化一个画刷。(3)重载对话框的函数OnCtlColor()函数,函数头如下:HBRUSH CMusicPlayerDlg:OnCtrlColor(CDC* pDC ,CWnd* pWnd ,UINT nCtrlColor)5、2定制并添加不规则按钮为播放器添加不规则的个性按钮,首先需要在对话框类中定义按钮的ID及按钮变量,并在对话框的初始化框中创建这些按钮对象。函数头如下:BOOL CMusicPlayerDlg:OnInitDialog()此函数的主要功能是:创建3个矩形按钮,分别用于最小化、最大化及关闭按钮。其中最大化按钮被禁用;然后再创建7个按钮,用于播放器的7个功能,其中Open和Exit的按钮路径有别于其他5个。第六部分 音乐播放器的功能设计与实现6、1为播放器添加ActiveMovie控件为播放器添加ActiveMovie控件,并为ActiveMovie控件及滑块控件添加相关变量。6、2利用向导添加功能函数由于按钮控件均为自定义的按钮控件,无法利用向导为按钮控件添加处理函数,需要自己映射。6、3实现打开音频的功能添加Open按钮处理函数OnOpen() ,用于打开音频文件。当用户指定音频文件后,将文件路径赋值给ActiveMovie,然后保存文件信息,并设置播放器状态。函数头如下:void CMusicPlayerDlg:OnOpen() 6、4实现开始播放音乐的功能Play按钮处理函数OnPlay() 主要用于播放为ActiveMovie控件指定的音频文件,并更新文件信息及播放器状态。本函数的关键是调用ActiveMovie控件的Run()函数播放被它指定的音频文件。函数头如下:void CMusicPlayerDlg:OnPlay() 6、5实现暂停播放音乐的功能Pause按钮处理函数OnPause() ,主要用于暂停ActiveMovie控件的播放动作,并更新当前状态。函数头如下:void CMusicPlayerDlg:OnPause() 6、6实现停止播放音乐的功能Stop按钮处理函数OnStop() ,主要用于停止ActiveMovie控件的播放动作,并更新当前状态。函数头如下:void CMusicPlayerDlg:OnStop() 6、7实现循环播放音乐的功能Repeat按钮处理函数OnRepeat(),主要用于改变当前循环播放的标识。函数头如下:void CMusicPlayerDlg:OnRepeat() 6、8实现最小化播放器的功能最小化按钮及Hide按钮处理函数OnHide() ,将播放器最小化到托盘区。函数头如下:void CMusicPlayerDlg:OnHide() 6、9实现关闭播放器的功能关闭按钮

温馨提示

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

最新文档

评论

0/150

提交评论