基于MFC的音乐播放器 文魏超.docx

上传人:wj 文档编号:527296 上传时间:2023-04-29 格式:DOCX 页数:29 大小:370.51KB
下载 相关 举报
基于MFC的音乐播放器 文魏超.docx_第1页
第1页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第2页
第2页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第3页
第3页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第4页
第4页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第5页
第5页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第6页
第6页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第7页
第7页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第8页
第8页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第9页
第9页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第10页
第10页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第11页
第11页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第12页
第12页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第13页
第13页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第14页
第14页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第15页
第15页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第16页
第16页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第17页
第17页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第18页
第18页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第19页
第19页 / 共29页
基于MFC的音乐播放器 文魏超.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于MFC的音乐播放器 文魏超.docx

《基于MFC的音乐播放器 文魏超.docx》由会员分享,可在线阅读,更多相关《基于MFC的音乐播放器 文魏超.docx(29页珍藏版)》请在冰点文库上搜索。

基于MFC的音乐播放器 文魏超.docx

湖南工业大学

课 程 设 计

资 料 袋

计算机与通信 学院(系、部) 2012 ~ 2013 学年第 2 学期

课程名称 VC++ 指导教师 沈浩 职称

学生姓名 文魏超 专业班级 网络1101 学号11408400138

题 目 基于MFC的音乐播放器

成 绩 起止日期2013年7月1日~2013年7月3日

清 单

序号

材 料 名 称

资料数量

备 注

1

C++面向对象程序设计(陶浩强)

1

2

深入浅出MFC(侯俊杰)

1

3

4

5

6

湖南工业大学

课程设计任务书

2012—2013学年第1学期

计算机与通信 学院(系、部) 网络工程 专业网络1101班级课程名称:

数据结构 设计题目:

图书管理系统

完成期限:

自2012年12月24日至2012 年12月27 日共1 周

内容及任务

音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。

利用MFC应用程序、媒体控制接口MIC的基本知识,设计一个功能非常简单易于操作的MP3播放器。

要求能够播放常用Windows音频格式的文件;实现播放控制:

播放、暂停、音量增减、添加歌曲等功能;实现从本地磁盘加入文件,然后对其进行播放。

本程序是基于MFC对话框的简单程序实现音乐的简单控制。

进度安排

起止日期

工作内容

2013.7.1

实现播放器界面

2013.7.2

实现基本播放功能

2013.7.3

实现上一首,下一首,暂停播放等功能

主要参考资料

VC++面向对象程序设计(陶浩强)深入浅出MFC(侯俊杰)

指导教师(签字):

系(教研室)主任(签字):

I

数据结构课程设计

设计说明书

基于MFC的音乐播放器

起止日期:

2013年 7月1日至2013年7月3日

学生姓名 文魏超

班级 网络111班

学号 11408400138

成绩

指导教师(签字)

计算机与通信学院

2013年7月3日

目录

目录 1

一、需求分析 3

二、概要设计 3

三、详细设计 6

1.界面设计 1

2.菜单设计 2

3.程序设计 4

1.初始化音量调节的滚动条 4

2.声音相关 4

3.添加音乐的相关按钮 5

4.列表相关的按钮 5

5.播放模式相关按钮 7

6.播放列表中索引为index的音乐 9

7.将音乐停止 9

8.将长整型的时间转换成00:

00:

00形式 10

9.每隔一秒调用,设置进度条当前位置 10

10.将配置信息写入文件 12

11.从配置文件读取信息,并把歌曲添加到列表 12

4.对歌曲的操作函数组成 13

1.构造函数 13

2.初始化 14

3.播放音乐 14

4.指定音量播放音乐 14

5.暂停音乐 14

6.停止音乐 15

7.静音 15

8.恢复声音 15

9.声音滚动条发生变化时,设置声音 15

10.跳到到一定位置 16

11.获取歌曲长度 16

12.获取当前播放位置 16

13.得到音乐的附加信息(定义在类外的函数) 17

四、调试分析 18

五、用户使用说明 20

六、测试结果 20

七、参考资料 21

0

5

1、需求分析

1、 音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。

利用MFC应用程序、媒体控制接口MIC的基本知识,设计一个功能非常简单易于操作的MP3播放器。

要求能够播放常用Windows音频格式的文件;实现播放控制:

播放、暂停、音量增减、添加歌曲等功能;实现从本地磁盘加入文件,然后

对其进行播放。

本程序是基于MFC对话框的简单程序实现音乐的简单控制。

2、 对播放器要求有播放,暂停,上一首,下一首,音量调节,静音设置,播放进度设施,播放模式设置,关闭工能。

其中播放模式至少有单曲循环,全部循环,随机播放,正常播放等模式。

根据用户

需求,还应该有播放列表,用户可以对播放列里的歌曲进行移除操作,双击某一首歌就播放该首歌曲。

当用户点击关闭按钮时,播放器能缩小到托盘,同时,用户可以在托盘里使用鼠标右键可以对播放器进行退出、上一首、下一首、暂停等操作。

2、概要设计

1.FC简单音乐播放器主要对常用Windows音频格式的文件实现播放控制:

播放歌曲、暂停播放、上一首、下一首、停止播放等;实现音量控制:

静音、声音放大以及声音减小的功能。

利用MCI基本知识实现相关功能。

2.MCI(MediaControlInterface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的

标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、像等多媒体设备,

而不需要知道它们的内部工作状况。

它所支持的媒体格式包括avi、wav、mp3等等。

音频文件包括多种

格式的文件,MP3就是其中的一种。

MP3是一种音频压缩的国际技术标准,它一般需要MP3播放器来读取。

通过该程序可以实现简单的音乐播放。

核心是让音乐文件和音乐播放设备关联。

3.本音乐播放器设计出具有通过控件进行退出、上一首、下一首、暂停等操作。

使能调节音量大

小,能调节播放进度,实现静音的设置与取消静音功能。

当关闭时可以最小化到托盘,同时托盘对控制

菜单进行复用,是能是实现上一首、下一首、暂停、播放和关闭的功能。

4.音乐播放列表可以保存播放过的歌曲,双击每一首歌的时候,可以播放该首歌曲,播放列变点右键时,可以清空播放列表,可以添加歌曲。

对歌曲点右键时,可以移除该首歌曲,查看该首歌曲的详

细信息,还可以查看该首歌曲所在的路径。

5.在该播放器上可以通过按键弹出设计者的信息,没打开一首歌曲可以看到每一首歌曲的总的播放时间,可以在控制菜单里选则上一首、下一首、暂停、退出、播放功能,这些功能也可以直接通过播放

器上的按键实现。

曲一次

曲重复

机播放

部一次

全 播

部 放

重 暂

复 停

播放模式

基于MFC的音乐播放器

退出

下一曲

上一曲

停止

减小

增加

停止

暂停

播放

播放控制

音量增减

音乐播放

功能图

开始

播放

结束

退出

添加音乐

停止

下一首

暂停

上一首

流程图

3、详细设计

创建项目

打开VC++6.0开发工具,执行文件新建菜单,建立一个MFC AppWizard(exe)以MusicPlayer为工程名的文档,在弹出对话框中选着基本对话框模式。

1.界面设计

在resourceView里的对话框里插入一个新对话框,然后添加如下图所示控件。

20

2.菜单设计

在menu中插入一个IDR_LISTMENU菜单如下图

在menu中插入一个IDR_MENU菜单,如下图所示

在menu中插入一个IDR_MODEMENU菜单,如下图所示

在menu中插入一个IDR_TRAYMENU菜单,如下图所示

窗口的各个控件的属性如下:

IDC_SLIDER播放进度条

IDC_BUTTONPRE播放进度时间

IDC_TOTALTIME 播放总时间

IDC_CHECKSOUND静音

IDC_SOUND_SLIDER音量调节

IDD_MAIN播放列表

IDC_BUTTONADD添加文件按钮

IDC_PLAYMODE播放模式选着按钮

IDC_STATICPLAYMODE播放模式显示框

3.程序设计

1.初始化音量调节的滚动条

voidInitsound(HWNDhwnd)

{

SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETRANGEMIN,(WPARAM)TRUE,0);//

设定最小值

SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETRANGEMAX,(WPARAM)TRUE,1000);//

设定最大值

SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETPOS,(WPARAM)TRUE,0);//设定当前的滚动值

SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETPAGESIZE,0,(LPARAM)100);//设置PAGEUPorPAGEDOWNkey的进度

SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETLINESIZE,0,(LPARAM)100);//设置RIGHTARROWorDOWNARROWkey的进度

SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETPOS,TRUE,iVolume); //设定当前的滚动值

}

2.声音相关

caseIDC_CHECKSOUND:

//设置静音

{

HWNDhwndcheck=GetDlgItem(hwnd,IDC_CHECKSOUND);intCheckState=Button_GetCheck(hwndcheck);

if(BST_CHECKED==CheckState)//设置静音

{

CurPlayingSong.KillSound();

}

elseif(BST_UNCHECKED==CheckState)

{

CurPlayingSong.ResumeSound();

}

}

break;

3.添加音乐的相关按钮

caseIDC_BUTTONADD:

//添加按钮

{

RECTrcAdd;GetWindowRect(GetDlgItem(hwnd,IDC_BUTTONADD),&rcAdd);HMENUhPopMenu=CreatePopupMenu();

AppendMenu(hPopMenu,MF_STRING,IDC_BUTTONADDFILE,TEXT("添加文件"));

AppendMenu(hPopMenu,MF_STRING,IDC_ADDDIR,TEXT("添加文件夹"));TrackPopupMenu(hPopMenu,TPM_LEFTBUTTON,rcAdd.left,rcAdd.bottom,0,hwnd,NULL);DestroyMenu(hPopMenu);

}

break;

caseIDC_BUTTONADDFILE:

//添加文件

{

AddMusicFileToList(hwnd);

}

break;

caseIDC_ADDFILE:

//添加目录

{

AddDirMusic(hwnd);

}

break;

4.列表相关的按钮

//处理ListBox的鼠标事件

caseIDC_LIST:

{

switch(codeNotify)

{

caseLBN_DBLCLK:

//鼠标双击

{

intindex=ListBox_GetCurSel(hwndList);PlayMusicInList(hwnd,index);

}

break;

}

}

break;

caseIDC_BUTTONREMOVE:

//菜单---将曲目移出列表

{

RemoveSelectedMusic(hwnd);

}

break;

caseIDC_BUTTONREMOVEALL:

//菜单 清空播放列表

{

int ret=MessageBox(hwnd,TEXT("是否清空播放列表?

"),TEXT("消息"),MB_YESNO|MB_ICONQUESTION);

if(IDYES!

=ret)return;

intCount=ListBox_GetCount(hwndList);for(inti=0;i

{

free((LPTSTR)ListBox_GetItemData(hwndList,i));

}

ListBox_ResetContent(hwndList);StopMusic(hwnd);

}

break;

caseIDM_VIEWINFO:

//查看歌曲信息

{

BOOLWINAPISongInfo_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAM

lParam);//函数声明

MP3_ID3v1_STRUCTSongInfo;

intindex=ListBox_GetCurSel(hwndList);

TCHAR*PszFilePathName=(TCHAR*)ListBox_GetItemData(hwndList,index);//歌曲全路径

if(!

GetMp3Info(PszFilePathName,&SongInfo))

{

MessageBox(hwnd,TEXT("获取信息失败!

"),TEXT("消息"),MB_OK|MB_ICONERROR);return;

}

HINSTANCEhInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);

DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_SONGINFO),hwnd,SongInfo_Proc,(LPARAM)&SongInfo);

}

break;

caseIDM_OPENLOCATION:

//打开歌曲的所在路径

{

TCHARszDirPath[MAX_PATH];//目录路径ZeroMemory(szDirPath,sizeof(szDirPath));

intindex=ListBox_GetCurSel(hwndList);

TCHAR*PszFilePathName=(TCHAR*)ListBox_GetItemData(hwndList,index);//歌曲全路径

TCHAR*Ptemp=strrchr(PszFilePathName,'\\');strncpy(szDirPath,PszFilePathName,Ptemp-PszFilePathName);

//MessageBox(hwnd,szDirPath,szDirPath,0);ShellExecute(hwnd,TEXT("open"),szDirPath,0,0,SW_SHOWNORMAL);

}

break;

5.播放模式相关按钮

caseIDC_PLAYMODE:

//播放模式选择按钮

{

RECTrect;GetWindowRect(GetDlgItem(hwnd,IDC_PLAYMODE),&rect);

HINSTANCEhInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);

HMENUhPopMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_PLAYMODEMENU));hPopMenu=GetSubMenu(hPopMenu,0);

TrackPopupMenu(hPopMenu,TPM_LEFTBUTTON,rect.left,rect.bottom-10,0,hwnd,NULL);

DestroyMenu(hPopMenu);

}

break;

caseIDM_PLAYONCE:

//菜单--单曲一次

{

iPlayMode=ONCE;

SetDlgItemText(hwnd,IDC_STATICPLAYMODE,TEXT("单曲一次"));

}

break;

caseIDM_PLAYREPART:

//菜单--单曲循环

{

iPlayMode=REPATE;

SetDlgItemText(hwnd,IDC_STATICPLAYMODE,TEXT("单曲循环"));

}

break;

caseIDM_PLAYRANDOM:

//菜单--随机循环

{

iPlayMode=RANDOM;

SetDlgItemText(hwnd,IDC_STATICPLAYMODE,TEXT("随机播放"));

}

break;

caseIDM_PLAYONCEALL:

//菜单--全部一次

{

iPlayMode=ONCEALL;

SetDlgItemText(hwnd,IDC_STATICPLAYMODE,TEXT("全部一次"));

}

break;

caseIDM_PLAYREPATEALL:

//菜单--全部循环

{

iPlayMode=REPATEALL;

SetDlgItemText(hwnd,IDC_STATICPLAYMODE,TEXT("全部循环"));

}

break;

/***********************************************************************/caseIDC_BUTTONHELP:

//关于

{

MessageBox(hwnd,TEXT("作者:

文魏超\n\n课程设计"),TEXT("关于"),MB_OK);

}

break;

caseIDC_SHOW:

//调整显示右边的窗口

{

if(ShowFlag==0)

{

}

else

{

}

}

SetWindowPos(hwnd,0,122,75,805,560,SWP_NOMOVE|SWP_NOZORDER);

ShowFlag=1;SetDlgItemText(hwnd,IDC_SHOW,TEXT("<"));

SetWindowPos(hwnd,0,122,75,405,560,SWP_NOMOVE|SWP_NOZORDER);

ShowFlag=0;SetDlgItemText(hwnd,IDC_SHOW,TEXT(">"));

break;

caseIDC_EXIT:

//退出

{

WriteSettingInfo(hwnd);

EndDialog(hwnd,0);

}

break;

caseIDC_SETSYSEXIT:

//设置系统按钮“×”时的动作

{

HMENUhMenu=GetMenu(hwnd);hMenu=GetSubMenu(hMenu,1);

if(iExitFlag)//关闭时最小到托盘,菜单已复选

{

}

else

{

}

}

iExitFlag=0;CheckMenuItem(hMenu,0,MF_BYPOSITION|MF_UNCHECKED);

iExitFlag=1;CheckMenuItem(hMenu,0,MF_BYPOSITION|MF_CHECKED);

break;

default:

break;

}

}

6.播放列表中索引为index的音乐

voidPlayMusicInList(HWNDhwnd,intindex)

{

if(LB_ERR==index)return;

CurPlayingSong.Stop();//先停止当前播放HWNDhwndList=GetDlgItem(hwnd,IDC_LIST);

ListBox_GetText(hwndList,index,CurPlayingSong.szName);lstrcpy(CurPlayingSong.szFilePathName,

(TCHAR*)ListBox_GetItemData(hwndList,index));

CurPlayingSong.Play(iVolume);//以iVolume音量开始播放

//设置播放进度条的最大最小值SendDlgItemMessage(hwnd,IDC_SLIDER,TBM_SETRANGEMIN,TRUE,0);SendDlgItemMessage(hwnd,IDC_SLIDER,TBM_SETRANGEMAX,TRUE,CurPlayingSong.iLength);

//设定时间

TCHARszLen[256];

ConvLTime2Str(CurPlayingSong.iLength,szLen);SetDlgItemText(hwnd,IDC_TOTALTIME,szLen);

//设定计时器,每隔一秒设定进度条的位置SetTimer(hwnd,1,1000,AdjustProgessPos);

//设置播放暂停按钮的图标

SetDlgItemText(hwnd,IDC_PLAYPAUSE,TEXT("暂停"));

//当前播放的索引PlayingIndex=index;

//设置当前播放文本框及程序的标题SetDlgItemText(hwnd,IDC_EDITPLAYING,CurPlayingSong.szName);TCHARszTitle[256];

wsprintf(szTitle,"%s--超哥音乐播放器",CurPlayingSong.szName);SetWindowText(hwnd,szTitle);

}

7.将音乐停止

voidStopMusic(HWNDhwnd)

{

CurPlayingSong.Stop();

CurPlayingSong.Init();

SetDlgItemText(hwnd,IDC_PLAYPAUSE,TEXT("播放"));

SetDlgItemText(hwnd,IDC_EDITPLAYING,TEXT("播放完毕"));

SetWindowText(hwnd,TEXT("音乐播放器"));KillTimer(hwnd,1);

}

8.将长整型的时间转换成00:

00:

00形式

voidConvLTime2Str(LONGLTime,TCHAR*StrTime)

{

LTime=LTime/1000;//由于LTime代表的微秒数,故除以1000structTime

{

}t;

inthour;intmin;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2