手把手教您用MFC做MP3音乐播放器_第1页
手把手教您用MFC做MP3音乐播放器_第2页
手把手教您用MFC做MP3音乐播放器_第3页
手把手教您用MFC做MP3音乐播放器_第4页
手把手教您用MFC做MP3音乐播放器_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、打 开 vc6.0建 立 如 图 所 示 mfc 工 程 文 件 1;.吨卜rt&iii卫玄也* 11 Iz 4UH. XfttD 晝一辿悴二叮区目* lin-rr *JJJI31Tx-扌凸比犀亠|创建初氏工咋空牺不苜(H:*V/-i3Z肿i I I LU二程名枚圍:JATL COM 曲WiMKl Q|CI*uLr F&uiruv I 丹jWInmU JCuninni JhppWijBrd J?Dat-Bba5e l-rafeci 嘟DB&hid讪 Ajdhln Wl/ard IK9(fxiiHBdir4 SlPFflri Pm 老i总iPi Exi.siDii VrtFurSlC Ai lW

2、eXCtmiriW/ifeii pwiarf fljIDJ_l|ciU xarsVIdniilicWacu hDtsburt ,- |4 Wcrf D X在onpaint函数下添加代码void CMp3Dlg:O nPai nt()if (Islco ni c()CPaintDC dc(this); / device con text for paintingSen dMessage(WMCONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Cen ter icon in clie nt recta ngleint cxIcon = GetSystemMe

3、trics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect;GetClie ntRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIco n + 1) / 2;/ Draw the icondc.DrawIc on (x, y, m_hIc on);elseCDialog:O nPa in t();CPai ntDCdc(this);CRect rect;GetClie ntRect(&rect);CDC

4、dcMem;dcMem.CreateCompatibleDC(&dc);CBitmapbmpBackgro und;bmpBackground.LoadBitmap(IDB_BITMAP6); /IDB_BITMAP6 是你的位图地址BITMAP bitm ap;bmpBackgro un d.GetBitmap(&bitmap);CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackgrou nd);dc.StretchBlt(O,O,rect.Width(),rect.Height(), &dcMem,O,O,bitmap.bmWidth,bit map .

5、bmHeight ,SRCCOPY);编译运行,你就会看到背景有图片了。插入-类,找至U geneticclass,类名 mp3.cpp你会发现在头文件中多了一个mp3.h文件在 mp3.h 文件中添加代码如下/ Mp3.h: interface for the Mp3 class./#if !defined(AFX_MP3_H_20D325E5_A96A_43FE_A485_92F57C68DD0D_INCLUDED_)#define AFX_MP3_H_20D325E5_A96A_43FE_A485_92F57C68DD0D_INCLUDED_#if _MSC_VER 1000#pragm

6、a once#endif / _MSC_VER 1000#include Mmsystem.hclass Mp3public:Mp3();virtual Mp3();HWND m_hWnd; /? 卩 u 卩? uDWORD DevicelD;/? ? 2?-0? d? ? ecJDt?MCI_OPEN_PARMS mciopenparms; /? ? o ?a?d? t 卩?2s yvoid Load(HWND hwnd,CString Strfilepath);DWORD getinformation(DWORD item);void Play();void Pause();void re

7、sum();void Stop();#endif / !defined(AFX_MP3_H_20D325E5_A96A_43FE_A485_92F57C68DD0D_INCLUDED_)在 mp3.cpp 中添加如下代码/ Mp3.cpp: implementation of the Mp3 class./#include stdafx.h#include Mp32 ? - .h#include Mp3.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construc

8、tion/Destruction/Mp3:Mp3()Mp3:Mp3()void Mp3:Load(HWND hwnd,CString Strfilepath)m_hWnd=hwnd;mciSendCommand(DevicelD,MCI_CLOSE,0,0); /? o? 7? t? emciopenparms.lpstrElementName=Stfilepath;?? o? a?t? ?z? ee?DWORD dwReturn;if (dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPV OI

9、D)&mciopenparms)/ e ?O ?a e ?3? D?C? ? ubuffer2 C? e?3? ? 一?char buffer256; mciGetErrorString(dwReturn,buffer,256);MessageBox(hwnd,bufer,3? ? 一? ”,MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);DeviceID=mciopenparms.wDevicelD; /? eae?0 ia o?DWORD Mp3:getinformation(DWORD item)/MCI? o? u? ?0卩?r,MCI_STATUS_PAR

10、MS mcistatusparms;/ y? e 0 ?mcistatusparms.dwItem=item;mcistatusparms.dwReturn=0;/? d ? ee C?a ? 0?土 ? X?2?e y mciSendCommand(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms); return mcistatusparms.dwReturn;void Mp3:Play()MCI_PLAY_PARMS mciplayparms;mciplayparms.dwCallback=(DWORD)m_hWnd;m

11、ciplayparms.dwFrom=0; /? ? o ? mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mcipla yparms);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(Devic

12、eID,MCI_CLOSE,0,0);在 dlg.cpp 文件的 public 中添加一行代码: int hour,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/ Note that LoadIcon does not require a subsequent DestroyIco

13、n in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDI_ICON1);hour=0;minute=0;second=0;dlg.cpp 中头文件如下:#include stdafx.h#include Mp32 ? - .h#include Mp32 ? - Dlg.h#include Mmsystem.h#include Digitalv.h#include Mp3.h/ & a ? o?卩?#pragma comment(lib,Winmm.lib)#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEsta

14、tic char THIS_FILE = _FILE_;#endif在对话框中双击添加添加 onfileopen 函数,代码如下void CMp3Dlg:Onfileopen()char filefiler=mp3 文件 (*.mp3)|*.mp3|wma 文件 (*.wma)|*.wma|wav 文件 (*.wav)|*.wav|;CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefile r);if (dlg.DoModal()=IDOK)CString str

15、filepath=dlg.GetPathName();CString strfilename=dlg.GetFileName();SetDlgItemText(IDC_filename,strfilename);CString mtime;CClientDC dc(this);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);/

16、显示时间进度 dc.TextOut(280,128,mtime);Mp3 mp3;mp3.Load(this-m_hWnd,strfilepath);GetDlgItem(IDC_open)-EnableWindow(TRUE); GetDlgItem(IDC_pause)-EnableWindow(TRUE);GetDlgItem(IDC_stop)-EnableWindow(TRUE);GetDlgItem(IDC_del)-EnableWindow(TRUE); m_list.InsertString(m_list.GetCount(),strfilename);/ 获取文件名 m_li

17、st.SetCurSel(m_list.GetCount()-1);双击播放,进入代码,添加如下void CMp3Dlg:Onopen()CString strfilename;int index=m_list.GetCurSel();CString mtime;CClientDC dc(this);Mp3 mp3;hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0);设置放置计数器区域的外观 dc.SetTextColor(RGB(255,255,203); 设置数字显示的颜色 mtime.Format(%02d:%02d:%02d,ho

18、ur,minute,second);/ 显示时间进度 dc.TextOut(280,128,mtime);if(index=-1)MessageBox(请添加音乐); return;m_list.GetText(index,strfilename); SetDlgItemText(IDC_filename,strfilename); mp3.Stop();mp3.Load(this-m_hWnd,strfilename);mp3.Play();SetTimer(0,1000,NULL); 同理,暂停,停止,删除,退出代码如下void CMp3Dlg:Onpause()/ TODO: Add y

19、our control notification handler code here CString strtemp;Mp3 mp3;GetDlgItemText(IDC_pause,strtemp);/ 获取按钮状态if (strtemp.Compare( 暂停 )=0)mp3.Pause(); SetDlgltemText(IDC_pause,继续);KillTimer(0);/ 取消计数器的显示if (strtemp.Compare( 继续 )=0)mp3.resum();SetTimer(0,1000,NULL); SetDlgItemText(IDC_pause,暂停);void C

20、Mp3Dlg:Onstop()/ TODO: Add your control notification handler code hereMp3 mp3;mp3.Stop();SetDlgItemText(IDC_pause,暂停);KillTimer(0);/ 取消计数器的显示CString mtime;CClientDC dc(this); hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0);设置放置计数器区域的外观 dc.SetTextColor(RGB(255,255,203); 设置数字显示的颜色 mtime.Format(%

21、02d:%02d:%02d,hour,minute,second);/ 显示时间进度 dc.TextOut(280,128,mtime);GetDlgItem(IDC_open)-EnableWindow(FALSE); GetDlgItem(IDC_pause)-EnableWindow(FALSE);GetDlgItem(IDC_stop)-EnableWindow(FALSE);GetDlgItem(IDC_del)-EnableWindow(FALSE);void CMp3Dlg:Ondel()UpdateData(TRUE);Mp3 mp3;int index=m_list.GetC

22、urSel();mp3.Stop();SetDlgItemText(IDC_filename,);KillTimer(0);hour=0;minute=0;second=0;/ 歌曲时间置 0if (index!=CB_ERR)m_list.DeleteString(index);void CMp3Dlg:Onexit()/ TODO: Add your control notification handler code here CDialog:OnCancel();ctrl+w 打开类向导,如图,添加 ontimer 函数代码如下:void CMp3Dlg:O nTimer(UINT nI

23、DEve nt)/ TODO: Add your message han dler code here an d/or call defaultCStri ng mtime;Mp3 mp3;second+;CClie ntDC dc(this);dc.SetBkColor(RGB(124,252,0);设置放置计数器区域的外观 dc.SetTextColor(RGB(255,255,203); 设置数字显示的颜色 if(second=60)设置钟表的显示minu te+;sec on d=0;if(mi nute=60)hour+; minu te=0;mtime.Format(%02d:%0

24、2d:%02d,hour,mi nute,seco nd);/ 显示时间进度 dc.TextOut(28O,128,mtime);DWORD cdf=mp3.geti nformatio n(MCI_STATUS_POSITION);DWORD cdfrom;cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAME(cdf);/获取当前播放文件的信息UpdateData(false);CDialog:O nTimer( nIDEve nt);ctrl+w打开类向导添加函数如下M-C C izardCI43

25、3 nmc:|cMp3Dlg耳Message Maps | Me mb er Vairiiables Aula m allo nAdiveX Events Class IntnProject:血pObject IDs:GL.Np琥帀器DlQ*h C;hWp3播族盘DOspMessages:LBN SbLCHANGtLBN LIUITkCL LAN_KILLFOCUS LBN_GELCANCEL I BN_SFTFOCUtSMem berlunctions:V DoUatfEMchaiqt亠W OnCustomdrawSlidiONi IDC SLIDER1:NM CUSTOMDRAWS OnD

26、bldkList ON_IOC_LI3r:LDN_DOLCLKW OfikltDhlugOM_WM_IMITDIALOGW OnPIntON WM PAINTDescfipliuii:Ihftl llie user duulildicked 挣 Itinyvoid CMp3Dlg:OnDblclkList()/在列表中选中,双击左键播放音乐CStri ng mtime;Mp3 mp3;CClie ntDC dc(this);hour=0;minu te=0;sec on d=0;dc.SetBkColor(RGB(124,252,0);设置放置计数器区域的外观 dc.SetTextColor(

27、RGB(255,255,203); 设置数字显示的颜色 mtime.Format(%02d:%02d:%02d,hour,mi nute,seco nd);/ 显示时间进度 dc.TextOut(28O,128,mtime);CStri ng strfile name;in t in dex=mi_l ist.GetCurSel();m_l ist.GetText(i ndex,strfile name);SetDlgItemText(IDC_file name,strfile name);mp3.Stop();mp3. Load(this-m_hWnd,strfile name);mp3.P

28、lay();SetTimer(0,1000,NULL);打开类向导,添加函数如下void CMp3Dlg:O nCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your con trol no tificati on han dler code hereUpdateData(true);mn t=m_slider.GetPos()/10;Setvolu mn (m_slider.GetPos();UpdateData(false);*pResult = 0;打开类向导,添加函数如下AFC ClassWizardMee

29、cage Mape Member Variaiblec Automation ActiveX Events Class: InfoAdd Claes.Add Fundiadelete FunctiIDC del4IUCilenamEiDCfileopenIDC LISTiDCopenIDC_pauseIDC SI IDER1ProjectClass name:WT |lMpJDIgS AMp嬌放器Dlgh CVAMpt放器叽苹pObjcM Da:Member functions;W OnDblcIkListW OnlnitDinlngW UnPaintON IDC LIST:LBN DBLCL

30、KDN_WM_INITDIAI OG ON_WM_FAINIMcaacs:Edit CodeW OiiQucr/Draglcuii ON_V/M_GUERrDRAGICOM0 QnRcIcascdcaplurcON IDC_SLIDER1:NM RELEAS匸DC执PTURE psniptinri:NntitiRS parent nf mnuLoadIcon(IDI_ICON1); hour=0;minute=0;second=0;void CMp3Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DA

31、TA_MAP(CMp3Dlg)DDX_Control(pDX, IDC_LIST, m_list);DDX_Control(pDX, IDC_SLIDER1, m_slider);DDX_Text(pDX, IDC_vol, m_int);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMp3Dlg, CDialog)/AFX_MSG_MAP(CMp3Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(ID_exit, Onexit)ON_NOTIFY(NM_CUSTOMDRAW, IDC_

32、SLIDER1, OnCustomdrawSlider1) ON_BN_CLICKED(IDC_fileopen, Onfileopen)ON_BN_CLICKED(IDC_open, Onopen)ON_BN_CLICKED(IDC_pause, Onpause) ON_BN_CLICKED(IDC_stop, Onstop)ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1) ON_WM_TIMER()ON_BN_CLICKED(IDC_del, Ondel) ON_LBN_DBLCLK(IDC_LIST,

33、 OnDblclkList) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CMp3Dlg message handlersBOOL CMp3Dlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR)

34、; pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialog SetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconSetWindowText(MP3 播放器 );MoveWindow(250,15

35、0,580,500); / 显示时间控制 m_slider.SetRange(0,1000); / 移动范围 m_slider.SetPos(500);/ 滑块指针的初始位置 GetDlgItem(IDC_open)-EnableWindow(FALSE); GetDlgItem(IDC_pause)-EnableWindow(FALSE); GetDlgItem(IDC_stop)-EnableWindow(FALSE); GetDlgItem(IDC_del)-EnableWindow(FALSE);/ TODO: Add extra initialization herereturn T

36、RUE; / return TRUE unless you set the focus to a control void CMp3Dlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout; dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam); / If you add a minimize button to your dialog, you will need the code below/ to d

37、raw the icon. For MFC applications using the document/view model, / this is automatically done for you by the framework.void CMp3Dlg:OnPaint()if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint

38、 cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);else/CDialog:OnPaint();CPaintDC dc(this);CRect rect;GetClientRect(

39、&rect);CDC dcMem; dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP6);BITMAP bitmap; bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight ,SRC

40、COPY);/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMp3Dlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CMp3Dlg:Onexit()/ TODO: Add your control notification handler code here CDialog:OnCancel();void CMp3Dlg:OnCustomdrawSlider1(NMHDR* p

41、NMHDR, LRESULT* pResult)/ TODO: Add your control notification handler code here UpdateData(true);m_int=m_slider.GetPos()/10;Setvolumn(m_slider.GetPos();UpdateData(false);*pResult = 0;void CMp3Dlg:Onfileopen()char filefiler=mp3 文件 (*.mp3)|*.mp3|wma 文件 (*.wma)|*.wma|wav 文件 (*.wav)|*.wav|;CFileDialog d

42、lg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefile r);if (dlg.DoModal()=IDOK)CString strfilepath=dlg.GetPathName();CString strfilename=dlg.GetFileName();SetDlgItemText(IDC_filename,strfilename);CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;dc.SetBkColor(RGB(124,252,0);设置放置计数器区域的外观 dc.SetTextColor(RGB(25

温馨提示

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

评论

0/150

提交评论