第二章
2.1 需求分析
设计简介及设计方案论述
随着社会的发展,有越来越多的人接触电脑,也有越来越多的人喜欢在上网、工作的时候,播放一点音乐,娱乐一下,缓解一下。所以,应运而生的是音频播放
6
器软件,能够为用户播放常见的格式音频文件。并且,在使用的过程中,也尽可能设计出一些人性化的设计。比如,能最小化到托盘并可以进行操作。良好的人机交互界面,也能给人以美好的感官享受。
2.2 系统功能及结构简介
2.2.1 系统功能
此音频播放器可以播放多格式的音频文件。在播放的时候,需要打开本地的音乐文件,选择想要打开的文件,点击播放便可以播放。
在播放的过程中,如果有事离开想要停止播放,可以点击暂停按钮,等到需要的时候,仍然可以点击播放,继续播放。如果需要退出,点击关闭按钮即可。如果是出于最小化到托盘的状态,点击右键选择退出即可。如果想换首歌,点击下一首或者上一首的按钮便可以了。
对于想详细了解歌曲歌词内容,点击界面上的“歌词按钮”,便可以显示歌词。 为了能够让在进行其它操作的用户不受打扰,可以将此播放器最小化到托盘。与此同时,用户依然能够通过点击鼠标右键进行相关的操作。
2.2.2 系统结构
此播放器编写的时候,利用的是MFC单文档程序的构成框架,然后再利用Windows提供的资源,运用控件,自己制作了对话框和人机交互界面。在制作界面的同时,也制作了各个按钮,并完成各个按钮的消息响应,便完成响应函数实现了功能。
第三章
3.1 界面设计
3.1.1 播放器界面设计
7
详细设计
此播放器的界面是利用控件和位图的结合制作出来了。
打开VC C++6.0新建一个工程,选择单文档。便生成了一个窗口。然后打开ResouceView,点开Dialog,插入Dialog,利用控件,绘制各个按钮。为了使各个按钮更加美观,使用位图,用自己收集的图片将各个按钮覆盖,最后添加消息响应函数,实现各个功能。
为了使所引入的位图能够和所绘制的窗口能完全吻合,在OnPaint()函数中,调用StretchBlt()函数,让其从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。
图3-1按钮控制
最后生成的界面比较美观,给人的感觉良好
图3.2播放器界面
3.1.2 按钮上的位图显示
为对话框添加9个按钮(Button),在Styles标签中选中Bitmap属性。将它们的ID分别为
IDC_Play,IDC_Stop_BUTTON,IDC_Next_BUTTON,IDC_Pre_BUTTON,IDC_Add_Song, IDC_Delet_Song,IDC_GC_BUTTON,IDC_MinWindow,ID_CloseWindow以实现对文件的各项操作。将5幅准备好的位图加入资源,其ID分别设为
IDC_Play,IDC_Stop_BUTTON,IDC_Next_BUTTON,IDC_Pre_BUTTON,IDC_Add_Song
8
,IDC_Delet_Song,IDC_GC_BUTTON,IDC_MinWindow,ID_CloseWindow,分别和5个按钮相对应。然后,在ClassWizard里为每个按钮分别添加一个CBitmapButton型的变量,分别命名为
m_BitmapBtn_Delete;m_BitmapBtn_Stop;m_BitmapBtn_MinWindow;m_BitmapBtn_MaxWindow;m_BitmapBtn_CloseWindow;m_BitmapBtn_NextSong;m_BitmapBtn_UpSong;m_BitmapBtn_paly;m_BitmapBtn_Add;m_BitmapBtn_GC;以对按钮进行操作。
3.2 各模块功能设计
3.2.1 各按钮功能的实现
(1)处理“打开”按钮
单击“打开”按钮后,在OnAddSong()函数中,首先对文件类型进行过滤,调用OpenFiles()函数打开对话框选择一个音频文件,通过InitPath()函数获取文件路径,通过InitPath()函数获取文件名后,调用SaveList()函数在Static Text控件上显示你所选择的歌曲文件名,然后再单击播放按钮,便可以播放歌曲。
(2) 处理“播放”按钮
单击“播放”按钮后,在OnPlay()函数中,通过调用Midi类中的Open()函数
9
获取刚才选择的文件路径以及文件名,调用该类的Midi类中的Play()函数播放歌曲,此时调用DisplayInfo()函数在Static Text控件上显示正在播放的歌曲,进行歌曲的播放,然后利用GetDlgItem()函数设置“播放”按钮不可用。
(3) 处理“停止”按钮 单击“停止”按钮后,在OnStopBUTTON()函数中,首先通过调用Midi类的Stop()函数停止正在播放的歌曲,此时的歌曲处于暂停时的进度上,利用GetDlgItem()函数设置“播放”按钮可用。
(5)处理“上一曲/下一曲”按钮 单击“上一曲”按钮时,在OnNextBUTTON()函数中,通过调用Midi类中的Next()函数,停止当前播放放的歌曲,并播放当前列表中的下一曲。“下一曲”按钮的处理与“上一曲”类似。
(6)处理“最小化”按钮
单击“最小化”按钮时,在OnMinWindow()函数中,通过调用ToTray()函数,将当前显示的窗口最小化,并显示在任务栏,在此情况下,仍就可以进行上述操作。
(7)处理“歌词”按钮
单击“歌词”按钮时,会在原有的窗口之外再弹出一个窗口,以此来显示歌词。这需要在这整个工程中新建一个GECI类,来绘制显示歌词的窗口。整个绘制的过程,与界面的设计是相类似的。
(8) 处理“关闭”按钮
单击“关闭”按钮后,在OnCloseWindow()函数中,调用CDialog类的OnOK()函数将退出对话框,结束程序的运行。
3.2.2 最小化到托盘
单击“最小化”按钮时,在OnMinWindow()函数中,通过调用ToTray()函数,当先窗口会被最小化至托盘。在这个过程中,ToTray()函数只能实现最小化,并不能实现在最小化的情况下进行操作。
在最小化至托盘后,要进行操作,就定义了一个OnShowTask(WPARAM
wParam,LPARAMlParam)的函数,利用if、switch语句进行判断。首先要通过鼠标的行为来获取最小化之后图标的ID。得到响应后,单击右键,显示弹出式menu。menu.AppendMenu(MF_STRING,IDC_Next_BUTTON,\下一曲\menu.AppendMenu(MF_STRING,IDC_Pre_BUTTON,\上一曲\menu.AppendMenu(MF_STRING,IDC_Stop_BUTTON,\停 止\menu.AppendMenu(MF_STRING,IDC_Play,\播放|暂停\menu.AppendMenu(MF_STRING,WM_DESTROY,\退 出\
由此来确定弹出式菜单的位置。点击后,鼠标得到响应,并执行操作。如果
10