用MFC做MP3音乐播放器超实用Word文档格式.docx
《用MFC做MP3音乐播放器超实用Word文档格式.docx》由会员分享,可在线阅读,更多相关《用MFC做MP3音乐播放器超实用Word文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
//CDialog:
OnPaint();
CDCdcMem;
dcMem.CreateCompatibleDC(&
dc);
CBitmapbmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP6);
/IDB_BITMAP6是你的位图地址
BITMAPbitmap;
bmpBackground.GetBitmap(&
bitmap);
CBitmap*pbmpOld=dcMem.SelectObject(&
bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&
dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
编译运行,你就会看到背景有图片了。
插入-类,找到geneticclass,类名mp3.cpp
你会发现在头文件中多了一个mp3.h文件
在mp3.h文件中添加代码如下
//Mp3.h:
interfacefortheMp3class.
//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_MP3_H__20D325E5_A96A_43FE_A485_92F57C68DD0D__INCLUDED_)
#defineAFX_MP3_H__20D325E5_A96A_43FE_A485_92F57C68DD0D__INCLUDED_
#if_MSC_VER>
1000
#pragmaonce
#endif//_MSC_VER>
#include"
Mmsystem.h"
classMp3
public:
Mp3();
virtual~Mp3();
HWNDm_hWnd;
//¼
Ç
Â
¼
µ
±
°
´
¿
Ú
Ä
¾
ä
ú
DWORDDeviceID;
//Ö
¸
¶
¨
²
¥
·
Å
Ò
ô
À
Ö
É
è
ID
MCI_OPEN_PARMSmciopenparms;
//Ö
ò
ª
Î
þ
Ê
ý
voidLoad(HWNDhwnd,CStringStrfilepath);
DWORDgetinformation(DWORDitem);
voidPlay();
voidPause();
voidresum();
voidStop();
};
#endif//!
在mp3.cpp中添加如下代码
//Mp3.cpp:
implementationoftheMp3class.
stdafx.h"
Mp3²
Æ
÷
.h"
Mp3.h"
#ifdef_DEBUG
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#definenewDEBUG_NEW
#endif
//Construction/Destruction
Mp3:
Mp3()
~Mp3()
voidMp3:
Load(HWNDhwnd,CStringStrfilepath)
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,"
"
MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);
DeviceID=mciopenparms.wDeviceID;
//¶
à
Ì
Í
º
DWORDMp3:
getinformation(DWORDitem)
//MCI½
ó
×
MCI_STATUS_PARMSmcistatusparms;
//´
»
ñ
¡
î
mcistatusparms.dwItem=item;
mcistatusparms.dwReturn=0;
//Ï
ë
Ë
Á
mciSendCommand(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&
mcistatusparms);
returnmcistatusparms.dwReturn;
Play()
MCI_PLAY_PARMSmciplayparms;
mciplayparms.dwCallback=(DWORD)m_hWnd;
mciplayparms.dwFrom=0;
//Ã
mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&
mciplayparms);
Pause()
mciSendCommand(DeviceID,MCI_PAUSE,0,0);
resum()
mciSendCommand(DeviceID,MCI_RESUME,0,0);
Stop()
mciSendCommand(DeviceID,MCI_STOP,0,0);
在dlg.cpp文件的public中添加一行代码:
inthour,minute,second;
在CMp3Dlg:
CMp3Dlg(CWnd*pParent/*=NULL*/)中添加如下
CMp3Dlg:
CMp3Dlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMp3Dlg:
IDD,pParent)
//{{AFX_DATA_INIT(CMp3Dlg)
m_int=0;
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDI_ICON1);
hour=0;
minute=0;
second=0;
dlg.cpp中头文件如下:
Dlg.h"
Digitalv.h"
//Ò
#pragmacomment(lib,"
Winmm.lib"
)
staticcharTHIS_FILE[]=__FILE__;
在对话框中双击添加添加onfileopen函数,代码如下
Onfileopen()
charfilefiler[]="
mp3文件(*.mp3)|*.mp3|"
"
wma文件(*.wma)|*.wma|"
"
wav文件(*.wav)|*.wav|"
;
CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefiler);
if(dlg.DoModal()==IDOK)
CStringstrfilepath=dlg.GetPathName();
CStringstrfilename=dlg.GetFileName();
SetDlgItemText(IDC_filename,strfilename);
CStringmtime;
CClientDCdc(this);
dc.SetBkColor(RGB(124,252,0));
//设置放置计数器区域的外观
dc.SetTextColor(RGB(255,255,203));
//设置数字显示的颜色
mtime.Format("
%02d:
%02d"
hour,minute,second);
//显示时间进度
dc.TextOut(280,128,mtime);
Mp3mp3;
mp3.Load(this->
m_hWnd,strfilepath);
GetDlgItem(IDC_open)->
EnableWindow(TRUE);
GetDlgItem(IDC_pause)->
GetDlgItem(IDC_stop)->
GetDlgItem(IDC_del)->
m_list.InsertString(m_list.GetCount(),strfilename);
//获取文件名
m_list.SetCurSel(m_list.GetCount()-1);
双击播放,进入代码,添加如下
Onopen()
CStringstrfilename;
intindex=m_list.GetCurSel();
if(index==-1)
MessageBox("
请添加音乐"
);
return;
m_list.GetText(index,strfilename);
mp3.Stop();
m_hWnd,strfilename);
mp3.Play();
SetTimer(0,1000,NULL);
同理,暂停,停止,删除,退出代码如下
Onpause()
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringstrtemp;
GetDlgItemText(IDC_pause,strtemp);
//获取按钮状态
if(strtemp.Compare("
暂停"
)==0)
mp3.Pause();
SetDlgItemText(IDC_pause,"
继续"
KillTimer(0);
//取消计数器的显示
mp3.resum();
SetTimer(0,1000,NULL);
Onstop()
SetDlgItemText(IDC_pause,"
KillTimer(0);
EnableWindow(FALSE);
GetDlgItem(IDC_del)->
Ondel()
UpdateData(TRUE);
SetDlgItemText(IDC_filename,"
//歌曲时间置0
if(index!
=CB_ERR)
m_list.DeleteString(index);
Onexit()
CDialog:
OnCancel();
ctrl+w打开类向导,如图,添加ontimer函数
代码如下:
OnTimer(UINTnIDEvent)
Addyourmessagehandlercodehereand/orcalldefault
second++;
if(second==60)//设置钟表的显示
minute++;
if(minute==60)
hour++;
DWORDcdf=mp3.getinformation(MCI_STATUS_POSITION);
DWORDcdfrom;
cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAME(cdf));
//获取当前播放文件的信息
UpdateData(false);
OnTimer(nIDEvent);
ctrl+w打开类向导添加函数如下
OnDblclkList()//在列表中选中,双击左键播放音乐
打开类向导,添加函数如下
OnCustomdrawSlider1(NMHDR*pNMHDR,LRESULT*pResult)
UpdateData(true);
m_int=m_slider.GetPos()/10;
Setvolumn(m_slider.GetPos());
*pResult=0;
OnReleasedcaptureSlider1(NMHDR*pNMHDR,LRESULT*pResult)
添加声音设置函数如下
DWORDCMp3Dlg:
Setvolumn(DWORDvol)
MCI_DGV_SETAUDIO_PARMSmcisetvolumn;
mcisetvolumn.dwCallback=NULL;
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;
到此已经基本完成了,我们可以试听一下
接下来我们可以到包成exe可执行文件,为了去掉那个不好看的图标,我们可以进入res文件夹,把原来的图标删掉,不过,你要放入一个cio格式的图片作为图标,cio