MFC音乐播放器傻瓜教程.docx

上传人:b****3 文档编号:3806273 上传时间:2022-11-25 格式:DOCX 页数:48 大小:1.01MB
下载 相关 举报
MFC音乐播放器傻瓜教程.docx_第1页
第1页 / 共48页
MFC音乐播放器傻瓜教程.docx_第2页
第2页 / 共48页
MFC音乐播放器傻瓜教程.docx_第3页
第3页 / 共48页
MFC音乐播放器傻瓜教程.docx_第4页
第4页 / 共48页
MFC音乐播放器傻瓜教程.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

MFC音乐播放器傻瓜教程.docx

《MFC音乐播放器傻瓜教程.docx》由会员分享,可在线阅读,更多相关《MFC音乐播放器傻瓜教程.docx(48页珍藏版)》请在冰豆网上搜索。

MFC音乐播放器傻瓜教程.docx

MFC音乐播放器傻瓜教程

代码下载地址

1、建立工程

1、建立一个MFC工程,命名为Tao_Music

2、选择为基本对话框

3、包含WindowsSockts

[因为要用网络功能]

4、使用静态链接库[方便一会直接生成的exe文件单独可以发布]

2、搭建界面

1、拖入控件:

拖入7个用于播放控制的button,一个picture控件,一个控制音量的滑块。

一个GroupBox用于盛放搜索功能各个控件及GroupBox中2个静态文本,2个可编辑文本,一个搜索按钮。

最下面的是一个ListControl用于显示歌曲的。

最终效果如下:

2、控件拖入并摆好

3、控件属性设置:

选中Button1右键选择属性,弹出:

将其改为:

相同的道理将音乐控制的7个按钮和搜索按钮的Styles和ExtendedStyles都设置成相同的风格。

Button2-8的General属性依次为:

【注意大小写】

相应的这里picture控件的属性为:

音量滑块的属性为:

GroupBox的属性为:

2个静态文本的属性只要改General就行啦:

2个文本编辑框也只要改General就行:

最后是listcontrol控件的属性:

好啦,最终的效果就是这样的:

前面这么啰嗦大家千万别弄错啦!

接下来就是写代码啦!

3、写代码实现功能

1、变量绑定:

查看->建立类向导->MemberVariables

将其设置为:

【双击对应蓝条即出现设置对话框】最后别忘点确定!

2、加入图片资源

【首先用格式工厂转换出32X32的24张bmp图片,放入工程文件的res文件中->进入Resource界面->右键Tao_Musicresources->insert->弹出的对话框点击导入然后将你的24张bmp图片一个一个导入,注意这里最多每次导入8个,要分批导入!

导入后的ID为IDB_BITMAP1----IDB_BITMAP24】

3、新建mp3类:

【插入->新建类】

//mp3.h

//音乐播放控制类

#include"mmsystem.h"//必须同时引入

#pragmacomment(lib,"Winmm.lib")

classmp3

{

public:

mp3();

virtual~mp3();

HWNDm_hWnd;//3个变量

DWORDDeviceID;

MCI_OPEN_PARMSmciopenparms;

voidLoad(HWNDhwnd,CStringStrfilepath);

DWORDgetinformation(DWORDitem);

voidPlay();

voidPause();

voidresum();

voidStop();

DWORDSetvolumn(DWORDvol);

};

//mp3.cpp

#include"StdAfx.h"

#include"mp3.h"

#include"Digitalv.h"

//---------------------------------------------------------------------

mp3:

:

mp3()

{

}

//---------------------------------------------------------------------

mp3:

:

~mp3()

{

}

//---------------------------------------------------------------------

//加载函数

//---------------------------------------------------------------------

voidmp3:

:

Load(HWNDhwnd,CStringStrfilepath)

{

//MessageBox(hwnd,Strfilepath,"43",MB_ICONHAND);

m_hWnd=hwnd;

mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空上一次播放的设备

mciopenparms.lpstrElementName=Strfilepath;//将音乐文件路径传给设备

DWORDdwReturn;

if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPVOID)&mciopenparms))

{

//如果打开文件失败,则将出错信息储存在buffer,并显示出错警告

charbuffer[256];

mciGetErrorString(dwReturn,buffer,256);

//MessageBox(hwnd,buffer,"HeHe,YouAreWrong!

",MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);

}

//打开文件成功就关联文件到设备

DeviceID=mciopenparms.wDeviceID;

}

//---------------------------------------------------------------------

DWORDmp3:

:

getinformation(DWORDitem)

{

MCI_STATUS_PARMSmcistatusparms;

mcistatusparms.dwItem=item;

mcistatusparms.dwReturn=0;

mciSendCommand(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);

returnmcistatusparms.dwReturn;

}

//---------------------------------------------------------------------

//播放函数

//---------------------------------------------------------------------

voidmp3:

:

Play()

{

MCI_PLAY_PARMSmciplayparms;

mciplayparms.dwCallback=(DWORD)m_hWnd;

mciplayparms.dwFrom=0;//每次播放都是从0开始播放

mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciplayparms);

}

//---------------------------------------------------------------------

//暂停

//---------------------------------------------------------------------

voidmp3:

:

Pause()

{

mciSendCommand(DeviceID,MCI_PAUSE,0,0);

}

//---------------------------------------------------------------------

//重播

//---------------------------------------------------------------------

voidmp3:

:

resum()

{

mciSendCommand(DeviceID,MCI_RESUME,0,0);

}

//---------------------------------------------------------------------

//停止

//---------------------------------------------------------------------

voidmp3:

:

Stop()

{

mciSendCommand(DeviceID,MCI_STOP,0,0);

mciSendCommand(DeviceID,MCI_CLOSE,0,0);

//当点击停止按钮时,将所有的信息都清除掉

}

//---------------------------------------------------------------------

//设置音量

//---------------------------------------------------------------------

DWORDmp3:

:

Setvolumn(DWORDvol)

{

MCI_DGV_SETAUDIO_PARMSmcisetvolumn;

mcisetvolumn.dwCallback=(DWORD)m_hWnd;

mcisetvolumn.dwItem=MCI_DGV_SETAUDIO_VOLUME;

mcisetvolumn.dwValue=vol;

mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_SETAUDIO_ITEM,(DWORD)(LPVOID)&mcisetvolumn);

//returnmcisetvolumn.dwValue;

return0;

}

4、修改Tao_MusicDlg.h

在CTao_MusicDlg类里加入下面函数和变量

public:

voidShow(intcnt);

voidaddsong(TCHAR*name);

voidsuiji();

voidpre();

voidnext();

voiddrawpic(intnTimerID);

BOOLAnalyseLrc(TCHAR*LrcFile);//歌词解析函数

BOOLDownLoad(TCHAR*Url,TCHAR*SaveName);//下载资源函数

booldown(TCHAR*song,TCHAR*songer,TCHAR*getstr);//下载XML资源函数

public:

inthour,minute,second;

CStringcursong;

intshowstr;

intdonghuakind;//动画种类[初始化时给一个随机数,选择显示的动画种类]

CImageListm_imList;

typedefstruct_LRC_INFO//定义歌词结构体

{

intTime;

TCHARLyric[256];

}LRC_INFO;

LRC_INFOLrcInfo[500];

5、修改Tao_Music.cpp

●在include下面再引入下面几个文件和库:

#include"mp3.h"

#include"mmsystem.h"

#include"digitalv.h"

#include

#include

#pragmacomment(lib,"Winmm.lib")

#pragmacomment(lib,"wininet.lib")

#pragmacomment(lib,"shlwapi.lib")

●紧接着在全局声明一个mp3型的全局变量:

mp3Mp3;

●转到OnInitDialog()函数处

在return前加入如下代码:

//TODO:

Addextrainitializationhere

SetWindowText("MP3播放器");//标题

m_slider.SetRange(0,1000);//移动范围

m_slider.SetPos(500);//滑块指针的初始位置

GetDlgItem(IDC_open)->EnableWindow(FALSE);

GetDlgItem(IDC_pause)->EnableWindow(FALSE);

GetDlgItem(IDC_del)->EnableWindow(FALSE);

//List初始化---------------------

//设置CListCtrl控件扩展风格:

整行选中\子项目图标列表|LVS_EX_GRIDLINES

DWORDdwStyle;

dwStyle=m_StoreItems.GetExtendedStyle();

dwStyle=dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_SUBITEMIMAGES;

m_StoreItems.SetExtendedStyle(dwStyle);

//载入32*32像素24位真彩(ILC_COLOR24)图片

m_imList.Create(32,32,ILC_COLOR24,10,20);//创建图像序列CImageList对象

//设置CImageList图像列表与CListCtrl控件关联LVSIL_SMALL小图标列表

m_StoreItems.SetImageList(&m_imList,LVSIL_SMALL);

//向列表视图控件InsertColumn插入3列数据

CRectmRect;

m_StoreItems.GetWindowRect(&mRect);//获取控件矩形区域

intlength=mRect.Width()-3;

m_StoreItems.InsertColumn(0,_T("图片"),LVCFMT_CENTER,40,-1);

m_StoreItems.InsertColumn(1,_T("信息"),LVCFMT_LEFT,length-60,-1);

//--------------

cursong="";

showstr=0;

donghuakind=rand()%4;

//TODO:

Addextrainitializationhere

●在文件最后依次添加如下函数:

//------------------------------------------------------------------------------------------------

//显示函数

//显示cnt=0为open

//1为delete

//2为stop

//3为timer

//------------------------------------------------------------------------------------------------

voidCTao_MusicDlg:

:

Show(intcnt)

{

CClientDCdc(this);

CStringmtime;

TCHARtemp[19];

DWORDcdf,cdfrom;

intshowstrlen=18,i;

inttposx,tposy,sposx,sposy;

tposx=12,tposy=128;

sposx=12,sposy=81;

switch(cnt){

case0:

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:

%02d:

%02d",hour,minute,second);//显示时间进度

dc.TextOut(tposx,tposy,mtime);

for(i=0;i

temp[i]=cursong[(i+showstr)%cursong.GetLength()];

}temp[i]='\0';

showstr=(showstr+1)%cursong.GetLength();

mtime.Format("----------------------------");//覆盖上次显示

dc.TextOut(sposx,sposy,mtime);

dc.TextOut(sposx,sposy,temp);

break;

case1:

dc.TextOut(sposx,sposy,"");

KillTimer(0);

KillTimer

(1);

KillTimer

(2);

hour=0;minute=0;second=0;//歌曲时间置0

break;

case2:

KillTimer(0);//取消计数器的显示

KillTimer

(1);

KillTimer

(2);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:

%02d:

%02d",hour,minute,second);//显示时间进度

dc.TextOut(tposx,tposy,mtime);

for(i=0;i

temp[i]=cursong[(i+showstr)%cursong.GetLength()];

}temp[i]='\0';

showstr=(showstr+1)%cursong.GetLength();

mtime.Format("----------------------------");//覆盖上次显示

dc.TextOut(sposx,sposy,mtime);

dc.TextOut(sposx,sposy,temp);

break;

case3:

second++;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

if(second==60){//设置钟表的显示

minute++;second=0;

}if(minute==60){

hour++;minute=0;

}

//mtime.Format("%02d:

%02d:

%02d",hour,minute,second);//显示时间进度

//dc.TextOut(280,128,mtime);

cdf=Mp3.getinformation(MCI_STATUS_LENGTH);//获得当前毫秒值MCI_STATUS_POSITION

if(cdf<=Mp3.getinformation(MCI_STATUS_POSITION)){//如果停止就进行换歌

CStringstrtemp;

GetDlgItemText(IDC_exit,strtemp);//获取按钮状态

if(strtemp.Compare("单曲")==0){

Mp3.Setvolumn(1000-m_slider.GetPos());//声音设为滑块指示的地方

Mp3.Load(this->m_hWnd,cursong);

Mp3.Play();

hour=0;minute=0;second=0;

}elseif(strtemp.Compare("顺序")==0){

next();

}elseif(strtemp.Compare("随机")==0){

suiji();

}

}

cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAME(cdf));//获取当前播放文件的信息

mtime.Format("%02d:

%02d:

%02d/%02d:

%02d",hour,minute,second,cdf/1000/60,cdf/1000%60);

dc.TextOut(tposx,tposy,mtime);

for(i=0;i

temp[i]=cursong[(i+showstr)%cursong.GetLength()];

}temp[i]='\0';

showstr=(showstr+1)%cursong.GetLength();

mtime.Format("----------------------------");//覆盖上次显示

dc.TextOut(sposx,sposy,mtime);

dc.TextOut(sposx,sposy,temp);

break;

default:

break;

}

}

//------------------------------------------------------------------------------------------------

//添加歌词

//------------------------------------------------------------------------------------------------

voidCTao_MusicDlg:

:

addsong(TCHAR*name)

{

//wsprintf(strNumber,_T("IDB_BITMAP%d"),rand()%24+162);

CBitmap*pBmp=NULL;

pBmp=newCBitmap();

pBmp->LoadBitmap(rand()%24+IDB_BITMAP1);//载入位图

m_imList.Add(pBmp,RGB(0,0,0));

deletepBmp;

//添加数据InsertItem向列表中插入主项数据SetItemText向列表中的子项写入数据

LVITEMlvItem={0};//列表视图控

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1