音乐播放器制作_第1页
音乐播放器制作_第2页
音乐播放器制作_第3页
音乐播放器制作_第4页
音乐播放器制作_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、音乐播放器制作 流程示意图: (1)建立工程 (2)建立界面 (3)写代码实现功能 建立MFC工程 把工程命名为Tao_Music 选为基于对话框 创建完成 添加控件如图所示 改变控件属性,使其尽可能美观 控件更改后应该是这个样子 引入32*32像素的BMP格式的照片 为程序连接变量 新建MP3类 为mp3头文件添加函数 #include mmsystem.h/必须同时引入 #pragma comment(lib,Winmm.lib) class mp3 public: mp3(); virtual mp3(); HWND m_hWnd;/3个变量 DWORD DeviceID; MCI_OP

2、EN_PARMS mciopenparms; void Load(HWND hwnd,CString Strfilepath); DWORD getinformation(DWORD item); void Play(); void Pause(); void resum(); void Stop(); DWORD Setvolumn(DWORD vol); ; 为MP3源文件添加代码 #include StdAfx.h #include mp3.h #include Digitalv.h mp3:mp3() mp3:mp3() /加载函数 void mp3:Load(HWND hwnd,CS

3、tring Strfilepath) /MessageBox(hwnd,Strfilepath,43,MB_ICONHAND); m_hWnd=hwnd; mciSendCommand(DeviceID,MCI_CLOSE,0,0);/在加载文件前先清空上一次播放的设备 mciopenparms.lpstrElementName=Strfilepath;/将音乐文件路径传给设备 DWORD dwReturn; if (dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPV OID) mciGetEr

4、rorString(dwReturn,buffer,256); /MessageBox(hwnd,buffer,HeHe,You Are Wrong!,MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP); /打开文件成功就关联文件到设备 DeviceID=mciopenparms.wDeviceID; DWORD mp3:getinformation(DWORD item) MCI_STATUS_PARMS mcistatusparms; mcistatusparms.dwItem=item; mcistatusparms.dwReturn=0; mciSendComm

5、and(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD) return mcistatusparms.dwReturn; /播放函数 void mp3:Play() MCI_PLAY_PARMS mciplayparms; mciplayparms.dwCallback=(DWORD)m_hWnd; mciplayparms.dwFrom=0;/每次播放都是从0开始播放 mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID) /暂停 void mp3:Pause() mciS

6、endCommand(DeviceID,MCI_PAUSE,0,0); /重播 void mp3:resum() mciSendCommand(DeviceID,MCI_RESUME,0,0); /停止 void mp3:Stop() mciSendCommand(DeviceID,MCI_STOP,0,0); mciSendCommand(DeviceID,MCI_CLOSE,0,0); /当点击停止按钮时,将所有的信息都清除掉 /设置音量 DWORD mp3:Setvolumn(DWORD vol) MCI_DGV_SETAUDIO_PARMS mcisetvolumn; mcisetvo

7、lumn.dwCallback=(DWORD)m_hWnd; mcisetvolumn.dwItem=MCI_DGV_SETAUDIO_VOLUME; mcisetvolumn.dwValue=vol; mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_SETAUDIO_IT EM,(DWORD)(LPVOID) /return mcisetvolumn.dwValue; return 0; 修改Tao_MusicDlg.h 在CTao_MusicDlg类里加入下面函数和变量 public: void Sho

8、w(int cnt); void addsong(TCHAR * name); void suiji(); void pre(); void next(); void drawpic(int nTimerID); BOOL AnalyseLrc(TCHAR* LrcFile);/歌词解析函数 BOOL DownLoad(TCHAR* Url, TCHAR* SaveName);/下载资源函数 bool down(TCHAR* song,TCHAR* songer,TCHAR* getstr);/下载XML资源函数 public: int hour,minute,second; CString

9、cursong; int showstr; int donghuakind;/动画种类初始化时给一个随机数,选择显示的动画种类 CImageListm_imList; typedef struct _LRC_INFO/定义歌词结构体 int Time; TCHAR Lyric256; LRC_INFO; LRC_INFO LrcInfo500; 修改Tao_Music.cpp 在include下面再引入下面几个文件和库: #include mp3.h #include mmsystem.h #include digitalv.h #include #include #pragma commen

10、t(lib,Winmm.lib) #pragma comment(lib,wininet.lib) #pragma comment(lib, shlwapi.lib) 程序初始化 初始化代码如下 SetWindowText(MP3播放器); /标题 m_slider.SetRange(0,1000); /移动范围 m_slider.SetPos(500); /滑块指针的初始位置 GetDlgItem(IDC_open)-EnableWindow(FALSE); GetDlgItem(IDC_del)-EnableWindow(FALSE); /List 初始化- / 设置CListCtrl控件

11、扩展风格:整行选中子项目图标列表|LVS_EX_GRIDLINES DWORD dwStyle; 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对象 / 设置CImageL

12、ist图像列表与CListCtrl控件关联 LVSIL_SMALL小图标列表 m_StoreItems.SetImageList( / 向列表视图控件InsertColumn插入3列数据 CRect mRect; m_StoreItems.GetWindowRect( / 获取控件矩形区域 int length = mRect.Width()-3; m_StoreItems.InsertColumn(0, _T(图片), LVCFMT_CENTER,40, -1); m_StoreItems.InsertColumn(1, _T(信息), LVCFMT_LEFT, length-60, -1)

13、; /- cursong=; showstr=0; donghuakind=rand()%4; / TODO: Add extra initialization here 在文件最后依次添加如下函数 void CTao_MusicDlg:Show(int cnt) CClientDC dc(this); CString mtime; TCHAR temp19; DWORD cdf,cdfrom; int showstrlen=18,i; int tposx,tposy,sposx,sposy; tposx=12,tposy=128; sposx=12,sposy=81; switch(cnt)

14、 case 0: 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;ishowstrlen;i+) tempi=cursong(i+showstr)%cursong.GetLength(); tempi=0; showstr=(sho

15、wstr+1)%cursong.GetLength(); mtime.Format(- );/覆 盖上次显示 dc.TextOut(sposx,sposy,mtime); dc.TextOut(sposx,sposy,temp); break; case 1: dc.TextOut(sposx,sposy,); KillTimer(0); KillTimer(1); KillTimer(2); hour=0;minute=0;second=0;/歌曲时间置0 break; case 2: KillTimer(0);/取消计数器的显示 KillTimer(1); KillTimer(2); ho

16、ur=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;ishowstrlen;i+) tempi=cursong(i+showstr)%cursong.GetLength(); tempi=0; showstr=(showstr+1)%cur

17、song.GetLength(); mtime.Format(- );/覆盖上次显示 dc.TextOut(sposx,sposy,mtime); dc.TextOut(sposx,sposy,temp); break; case 3: 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(%0

18、2d:%02d:%02d,hour,minute,second);/显示时间进度 /dc.TextOut(280,128,mtime); cdf=Mp3.getinformation(MCI_STATUS_LENGTH);/获得当前毫秒值MCI_STATUS_POSITION if(cdfm_hWnd,cursong); Mp3.Play(); hour=0;minute=0;second=0; else if(strtemp.Compare(顺序)=0) next(); else if(strtemp.Compare(随机)=0) suiji(); cdfrom=MCI_MAKE_MSF(M

19、CI_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;iLoadBitmap(rand()%24+IDB_BITMAP1);/ 载入位 图 m_imList.Add(pBmp,RGB(0,0,0); delete pBmp; / 添加数据 InsertItem向

20、列表中插入主项数据 SetItemText向列表中的子项写入数据 LVITEM lvItem=0; / 列表视图控 LVITEM用于定义项的结构 lvItem.mask = LVIF_IMAGE|LVIF_TEXT;/ 文字、图片 lvItem.iItem = m_StoreItems.GetItemCount(); / 行号 lvItem.iImage = m_StoreItems.GetItemCount(); / 图片索引号(第一幅图片 IDB_BITMAP1) lvItem.iSubItem = 0;/ 子列号 m_StoreItems.InsertItem( / 第一列为图片 m_S

21、toreItems.SetItemText(m_StoreItems.GetItemCount()-1,1,name); / 第二列为名字 /随机函数 void CTao_MusicDlg:suiji() int index=m_StoreItems.GetSelectionMark();/获取选中的文本 if(index=-1) MessageBox(请添加音乐); return; index=rand()%m_StoreItems.GetItemCount(); CString strfilename; char str300; m_StoreItems.GetItemText(index

22、,1,str,sizeof(str); strfilename.Format(_T(%s),str); cursong=strfilename; m_StoreItems.EnsureVisible(index,FALSE);/选中 m_StoreItems.SetItemState(index,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|L VIS_SELECTED); /选中行 m_StoreItems.SetSelectionMark(index); m_StoreItems.SetFocus(); /SetDlgItemText(IDC_filena

23、me,strfilename); Mp3.Stop(); Mp3.Load(this-m_hWnd,strfilename); Mp3.Play(); GetDlgItem(IDC_open)-EnableWindow(TRUE); GetDlgItem(IDC_del)-EnableWindow(TRUE); Show(0); /上一曲 void CTao_MusicDlg:pre() int index=m_StoreItems.GetSelectionMark();/获取选中的文本 if(index=-1) MessageBox(请添加音乐); return; index=(index-

24、1+m_StoreItems.GetItemCount()%m_StoreItems.GetItemCount(); CString strfilename; char str300; m_StoreItems.GetItemText(index,1,str,sizeof(str); strfilename.Format(_T(%s),str); cursong=strfilename; m_StoreItems.EnsureVisible(index,FALSE);/选中 m_StoreItems.SetItemState(index,LVIS_FOCUSED|LVIS_SELECTED,L

25、VIS_FOCUSED|L VIS_SELECTED); /选中行 m_StoreItems.SetSelectionMark(index); m_StoreItems.SetFocus(); /SetDlgItemText(IDC_filename,strfilename); Mp3.Stop(); Mp3.Load(this-m_hWnd,strfilename); Mp3.Play(); GetDlgItem(IDC_open)-EnableWindow(TRUE); GetDlgItem(IDC_del)-EnableWindow(TRUE); Show(0); /下一曲 void C

26、Tao_MusicDlg:next() int index=m_StoreItems.GetSelectionMark();/获取选中的文本 if(index=-1) MessageBox(请添加音乐); return; mp3 Mp3; index=(index+1)%m_StoreItems.GetItemCount(); CString strfilename; char str300; m_StoreItems.GetItemText(index,1,str,sizeof(str); strfilename.Format(_T(%s),str); cursong=strfilename

27、; m_StoreItems.EnsureVisible(index,FALSE);/选中 m_StoreItems.SetItemState(index,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|L VIS_SELECTED); /选中行 m_StoreItems.SetSelectionMark(index); m_StoreItems.SetFocus(); /SetDlgItemText(IDC_filename,strfilename); Mp3.Stop(); Mp3.Load(this-m_hWnd,strfilename); Mp3.Pla

28、y(); GetDlgItem(IDC_open)-EnableWindow(TRUE); GetDlgItem(IDC_del)-EnableWindow(TRUE); Show(0); 功能的实现 CFileDialog dlg(TRUE);/打开CFileDialog对象 dlg.m_ofn.Flags |= OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY dlg.m_ofn.lpstrFilter = _T(Mp3 Files(*.mp3)0*.mp30Wave Audio Files(*.wav)0*.wav0MI

29、DI Files(*.mid)0*.mid0AVI Files(*.avi)0*.avi0All Files(*.*)0*.*00); dlg.m_ofn.lpstrTitle=添加音乐; dlg.m_ofn.nMaxFile=100*MAX_PATH;/最多100个文件 dlg.m_ofn.lpstrFile =new TCHARdlg.m_ofn.nMaxFile; ZeroMemory(dlg.m_ofn.lpstrFile,sizeof(TCHAR)*dlg.m_ofn.nMaxFile); /显示文件对话框,获得文件名集合 int retval=dlg.DoModal(); if(r

30、etval=IDCANCEL)return; if (retval=IDOK) int i = 0; CString strfilepath101; CString strfilename101; POSITION pos = dlg.GetStartPosition();/获取第一个文件位置 while (pos)strfilenamei = dlg.GetNextPathName(pos); char *str=(LPSTR)(LPCTSTR)strfilenamei; addsong(str);/加入mylist列表 i+;/实现和上面功能一样的代码:转到+选中+高亮 m_StoreIt

31、ems.EnsureVisible(m_StoreItems.GetItemCount()-1,FALSE); m_StoreItems.SetItemState(m_StoreItems.GetItemCount()- 1,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED); /选中行 m_StoreItems.SetSelectionMark(m_StoreItems.GetItemCount()-1); m_StoreItems.SetFocus(); GetDlgItem(IDC_open)-EnableWindow(TRUE); GetDlgItem(IDC_del)-EnableWindow(TRUE); delete dlg.m_ofn.lpstrFile; 第二个按钮添加代码 UpdateData(TRUE); mp3 Mp3; int index=m_StoreItems.GetSelectionMark();/获取选中的文本 CString strfilename; char st

温馨提示

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

评论

0/150

提交评论