已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/download/beautifulzzzz/7447641 代码下载地址1、建立工程21、建立一个MFC工程,命名为Tao_Music32、选择为基本对话框33、包含Windows Sockts44、使用静态链接库方便一会直接生成的exe文件单独可以发布52、 搭建界面51、 拖入控件:52、 控件拖入并摆好63、 控件属性设置:73、 写代码实现功能151、变量绑定:152、加入图片资源163、新建mp3类:174、修改Tao_MusicDlg.h205、修改Tao_Music.cpp216、功能实现:327、加一个TImer消息使时间跑起来!398、给音量控制滑块加消息,使音量控制实现42编译运行完工!431、建立工程1、建立一个MFC工程,命名为Tao_Music2、选择为基本对话框3、包含Windows Sockts因为要用网络功能4、使用静态链接库方便一会直接生成的exe文件单独可以发布2、 搭建界面1、 拖入控件:拖入7个用于播放控制的button,一个picture控件,一个控制音量的滑块。一个Group Box用于盛放搜索功能各个控件及Group Box中2个静态文本,2个可编辑文本,一个搜索按钮。最下面的是一个List Control用于显示歌曲的。最终效果如下:2、 控件拖入并摆好3、 控件属性设置:选中Button1右键选择属性,弹出:将其改为:相同的道理将音乐控制的7个按钮和搜索按钮的Styles和Extended Styles都设置成相同的风格。Button2-8的General属性依次为:【注意大小写】相应的这里picture控件的属性为:音量滑块的属性为:Group Box的属性为:2个静态文本的属性只要改General就行啦:2个文本编辑框也只要改General就行:最后是list control控件的属性:好啦,最终的效果就是这样的:前面这么啰嗦大家千万别弄错啦!接下来就是写代码啦!3、 写代码实现功能1、变量绑定:查看-建立类向导-Member Variables将其设置为:【双击对应蓝条即出现设置对话框】最后别忘点确定!2、加入图片资源【首先用格式工厂转换出32X32的24张bmp图片,放入工程文件的res文件中-进入Resource界面-右键Tao_Music resources-insert-弹出的对话框点击导入然后将你的24张bmp图片一个一个导入,注意这里最多每次导入8个,要分批导入!导入后的ID为IDB_BITMAP1-IDB_BITMAP24】3、新建mp3类:【插入-新建类】/mp3.h/音乐播放控制类#include mmsystem.h/必须同时引入#pragma comment(lib,Winmm.lib)class mp3 public:mp3();virtual mp3(); HWND m_hWnd;/3个变量DWORD DeviceID; MCI_OPEN_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.cpp#include StdAfx.h#include mp3.h#include Digitalv.h /-mp3:mp3()/-mp3:mp3()/-/加载函数/-void mp3:Load(HWND hwnd,CString 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)(LPVOID)&mciopenparms)/如果打开文件失败,则将出错信息储存在buffer,并显示出错警告char buffer256; mciGetErrorString(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;mciSendCommand(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);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)&mciplayparms);/-/暂停/-void mp3:Pause()mciSendCommand(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;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);/return mcisetvolumn.dwValue;return 0;4、修改Tao_MusicDlg.h在CTao_MusicDlg类里加入下面函数和变量public:void Show(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 cursong;int showstr;int donghuakind;/动画种类初始化时给一个随机数,选择显示的动画种类CImageListm_imList;typedef struct _LRC_INFO/定义歌词结构体int Time;TCHAR Lyric256;LRC_INFO;LRC_INFO LrcInfo500;5、修改Tao_Music.cppl 在include下面再引入下面几个文件和库:#include mp3.h#include mmsystem.h#include digitalv.h#include #include #pragma comment(lib,Winmm.lib)#pragma comment(lib,wininet.lib) #pragma comment(lib, shlwapi.lib)l 紧接着在全局声明一个mp3型的全局变量:mp3 Mp3;l 转到OnInitDialog()函数处在return 前加入如下代码:/ TODO: Add extra initialization hereSetWindowText(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_GRIDLINESDWORD 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对象/ 设置CImageList图像列表与CListCtrl控件关联 LVSIL_SMALL小图标列表m_StoreItems.SetImageList(&m_imList,LVSIL_SMALL);/ 向列表视图控件InsertColumn插入3列数据 CRect mRect;m_StoreItems.GetWindowRect(&mRect); / 获取控件矩形区域int length = 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: Add extra initialization herel 在文件最后依次添加如下函数:/-/显示函数/显示cnt=0为open/1为delete/2为stop/3为timer/-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)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=(showstr+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;/歌曲时间置0break;case 2: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;ishowstrlen;i+)tempi=cursong(i+showstr)%cursong.GetLength();tempi=0;showstr=(showstr+1)%cursong.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(%02d:%02d:%02d,hour,minute,second);/显示时间进度/dc.TextOut(280,128,mtime); cdf=Mp3.getinformation(MCI_STATUS_LENGTH);/获得当前毫秒值MCI_STATUS_POSITIONif(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(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;iLoadBitmap(rand()%24+IDB_BITMAP1);/ 载入位图m_imList.Add(pBmp,RGB(0,0,0); delete pBmp; / 添加数据 InsertItem向列表中插入主项数据 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(&lvItem); / 第一列为图片m_StoreItems.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,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|LVIS_SELECTED); /选中行m_StoreItems.SetSelectionMark(index);m_StoreItems.SetFocus();/SetDlgItemText(IDC_filename,strfilename);Mp3.Stop();Mp3.Load(this-m_hWnd,strfilename);Mp3.Play();Mp3.Setvolumn(1000-m_slider.GetPos();/声音设为滑块指示的地方 SetTimer(0,1000,NULL);SetTimer(1,100,NULL);SetTimer(2,100,NULL);GetDlgItem(IDC_open)-EnableWindow(TRUE);GetDlgItem(IDC_pause)-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-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,LVIS_FOCUSED|LVIS_SELECTED); /选中行m_StoreItems.SetSelectionMark(index);m_StoreItems.SetFocus();/SetDlgItemText(IDC_filename,strfilename);Mp3.Stop();Mp3.Load(this-m_hWnd,strfilename);Mp3.Play();Mp3.Setvolumn(1000-m_slider.GetPos();/声音设为滑块指示的地方 SetTimer(0,1000,NULL);SetTimer(1,100,NULL);SetTimer(2,100,NULL);GetDlgItem(IDC_open)-EnableWindow(TRUE);GetDlgItem(IDC_pause)-EnableWindow(TRUE); GetDlgItem(IDC_del)-EnableWindow(TRUE);Show(0);/-/下一曲/-void CTao_MusicDlg:next()int index=m_StoreItems.GetSelectionMark();/获取选中的文本if(index=-1)MessageBox(请添加音乐);return;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;m_StoreItems.EnsureVisible(index,FALSE);/选中m_StoreItems.SetItemState(index,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED); /选中行m_StoreItems.SetSelectionMark(index);m_StoreItems.SetFocus();/SetDlgItemText(IDC_filename,strfilename);Mp3.Stop();Mp3.Load(this-m_hWnd,strfilename);Mp3.Play();Mp3.Setvolumn(1000-m_slider.GetPos();/声音设为滑块指示的地方 SetTimer(0,1000,NULL);SetTimer(1,100,NULL);SetTimer(2,100,NULL);GetDlgItem(IDC_open)-EnableWindow(TRUE);GetDlgItem(IDC_pause)-EnableWindow(TRUE); GetDlgItem(IDC_del)-EnableWindow(TRUE);Show(0);/-/解析歌词/-BOOL CTao_MusicDlg:AnalyseLrc(TCHAR* LrcFile) /读取文件到缓冲区中TCHAR* LrcBuf = NULL;FILE* f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- NBT 11314-2023 输电线路共享铁塔设计规程
- DLT 5461.2-2013 火力发电厂施工图设计文件内容深度规定第2部分:总图运输
- 广州酒家集团面试题及答案
- 公务员面试随机面试题及答案
- 农业数字化管理新模式实践案例总结报告
- 公务员面试募捐面试题及答案
- 会计招聘面试题及答案
- 海南航空校招真题及答案
- 公务员面试纪实面试题及答案
- 光大集团招聘笔试题及答案
- 2025全国医疗应急能力培训系列课程参考答案
- 初中英语试卷讲评及课堂教学设计
- 上海安保考试题目及答案
- 糖尿病专家培训课件
- 2025-2026学年深圳市罗湖区九年级(上)英语第一学期期中联考试卷(解析版)
- 雨课堂在线学堂《中国传统文化》课后单元测试答案
- 2025年大学《社会工作-社会福利思想》考试参考题库及答案解析
- 独孤一箭实盘交割单 独股一箭20w实盘交割单
- 2025交管12123学法减分题库附含参考答案
- 冬季施工混凝土养护方法
- 2025年医学高数期末考试题及答案
评论
0/150
提交评论