1、MFC音乐播放器傻瓜教程 代码下载地址1、建立工程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右键选择属性,弹出:将其改为
2、:相同的道理将音乐控制的7个按钮和搜索按钮的Styles和Extended Styles都设置成相同的风格。Button2-8的General属性依次为:【注意大小写】相应的这里picture控件的属性为:音量滑块的属性为:Group Box的属性为:2个静态文本的属性只要改General就行啦:2个文本编辑框也只要改General就行:最后是list control控件的属性:好啦,最终的效果就是这样的:前面这么啰嗦大家千万别弄错啦!接下来就是写代码啦!3、写代码实现功能1、变量绑定:查看-建立类向导-Member Variables将其设置为:【双击对应蓝条即出现设置对话框】最后别忘点确定
3、!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(); H
4、WND 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()
5、/-/加载函数/-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
6、|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)
7、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; mciplayparm
8、s.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); mci
9、SendCommand(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_VA
10、LUE|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);/歌词解析
11、函数 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;/动画种类初始化时给一个随机数,选择显示的动画种类 CImageList m_imList;typedef struct _LRC_INFO/定义歌词结构体 int Time; TCHAR Lyric256; LR
12、C_INFO; LRC_INFO LrcInfo500;5、修改Tao_Music.cpp在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)紧接着在全局声明一个mp3型的全局变量:mp3 Mp3;转到OnInitDialog()函数处在return 前加入如下代码:/ TO
13、DO: 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_GRIDLI
14、NESDWORD 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小
15、图标列表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);/-curson
16、g=;showstr=0;donghuakind=rand()%4;/ TODO: Add extra initialization here在文件最后依次添加如下函数:/-/显示函数/显示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;
17、 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.Get
18、Length(); 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;/歌曲时间置0 break; case 2: KillTimer(0);/取消计数器的显示
19、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(); te
20、mpi=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) h
21、our+;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(cdfm_hWnd,cursong); Mp3.Play(); hour=0;minute=0;second=0; else if(strtemp.Compare(顺序)=0) next(); else if(strtemp.Compare(随机)=0)
22、 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; / 列表视图控
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1