用MFC做MP3音乐播放器——超实用
mfc ffmpeg例子

mfc ffmpeg例子MFC(Microsoft Foundation Class)是微软提供的用于开发Windows应用程序的类库,而FFmpeg是一个开源的跨平台音视频处理工具。
结合MFC和FFmpeg可以实现在Windows平台上对音视频进行处理和播放的功能。
下面我将从MFC和FFmpeg的结合、示例代码和注意事项等方面来回答你的问题。
首先,我们需要在MFC应用程序中集成FFmpeg库。
你需要下载FFmpeg的开发包,并在MFC项目中进行配置。
接着,你可以使用FFmpeg提供的API来实现音视频的编解码、播放和处理等功能。
下面是一个简单的MFC和FFmpeg结合的示例代码:c++。
extern "C" {。
#include <libavformat/avformat.h>。
#include <libswscale/swscale.h>。
}。
// 初始化FFmpeg.av_register_all();// 打开输入文件。
AVFormatContext pFormatCtx = NULL;if (avformat_open_input(&pFormatCtx, "input.mp4", NULL, NULL) != 0) {。
return -1; // 打开文件失败。
}。
// 查找流信息。
if (avformat_find_stream_info(pFormatCtx, NULL) < 0) {。
return -1; // 无法获取流信息。
}。
// 寻找视频流。
int videoStream = -1;for (int i = 0; i < pFormatCtx->nb_streams; i++) {。
if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {。
基于MFC的视频播放器

河南农业大学本科生毕业论文题目基于MFC的视频播放器学院理学院专业班级11级电子信息科学与技术(信息安全专门化)3班学生姓名蔡秀梅指导教师谷小青撰写日期:2015年05月28日基于MFC的视频播放器蔡秀梅摘要本文主要介绍了开发一款简单的视频播放器。
可以播放多种格式的音频、视频文件,它实现的基本功能包括:音频视频文件的打开、添加到菜单、媒体的播放、暂停播放、停止以及歌曲信息的查询、添加与删除、音量大小的调节、播放时间的拖动等。
使之成为一种简易的视频播放设备,能够完美的播放市场上大部分的音频、视频文件。
在本毕业设计中,系统开发平台为Windows7旗舰版OS(操作系统),程序运行环境使用Visual C++ 6.0。
在程序设计中,利用了微软公司开发的ActiveX 控件——可视动画控件Windows Media Player,程序通过调试运行,初步实现了设计目标,本程序是基于MFC集成开发环境,利用Windows Media Player控件实现视频播放的功能的,除了基本的播放控制模块外,还具有多文件的自动顺序循环播放、单曲播放、随机播放等多种实用功能,能够很好地满足当代人的音视觉需求。
关键词: 视频播放器;ActiveX控件;微软基础类Based on the MFC video playerCAI Xiu-meiAbstractThis article is developed a simple video player. It can play video formats of audio, video files. It includes the basic functions include that open the Audio and video files, add to the menu, and media playback, pause, stop and song information such as query, add and delete, adjust the volume size, play time drag and so on. Making it a simple media player device, most audio or video files in the market can be played perfectly by this media player. In this Graduation, The System Development Platform is Windows 7Ultimate. The Programming Environment is Visual C++ 6.0. In the program design, using the ActiveX control Developed by Microsoft. Program by commissioning, initial design goals achieved, the program is based on MFC Integrated Development Environment. Using Windows Media Player control can realize the function of the media player. In addition to the basic playback controls, it also has many other utility functions, such as automatic multi-file loop sequence, single play,random play and so on. Itcan meet the demand of contemporary sound sense of vision very well.Key words : video player ; Active control ; Microsoft Foundation Classes目录1 绪论 (1)1.1 课题背景 (1)1.2论文主要研究内容 (3)1.3论文结构安排 (4)2 相关技术介绍 (5)2.1 MFC (5)2.2 Visual C++6.0 (5)2.3 ActiveX控件 (5)3视频播放器的总体设计 (7)3.1 数据模型 (7)3.2 软件的模块设计 (7)3.3播放器数据流图 (8)4基于MFC的视频播放器的实现 (10)4.1多媒体播放器的界面设计 (10)4.2 视频播放器的播放控制功能的设计与实现 (10)4.2.1 播放列表 (10)4.2.2 添加文件 (11)4.2.3 保存列表 (12)4.2.4 播放文件 (13)4.2.5 删除当前和清空列表 (14)4.2.6 播放方式(随机播放、顺序播放、单曲播放) (14)4.2.7 退出程序 (15)5 结论 (17)参考文献 (18)附录 (19)致谢 (29)1 绪论1.1 课题背景随着计算机技术的飞速发展,以计算机技术为基础的多媒体技术在生活中扮演重要的角色。
MFC播放MP3

MFC播放MP3工程中添加 Winmm.lib stdafx.h 里面添加包含 Mmsystem.h 使用mciSendCommand函数播放MP3#include <windows.h>#include "resource.h"#pragma comment(lib, "winmm")LRESULT CALLBACK WndProc(HWND,UINT,WPARAM ,LPARA M );int MP3Player(HWND,int fnNum);HINSTANCE Hinstance;int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPr evInstance,LPSTR lpCmdLine,int nShowCmd){WNDCLASS wndclass;HWND hwnd;MSG msg;WCHAR *title=L"快乐の小②B制作";WCHAR *MP3=L"MP3 Player";Hinstance=hInstance;wndclass.cbClsExtra=NULL;wndclass.cbWndExtra=NULL;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE _BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);wndclass.hInstance=hInstance;wndclass.lpfnWndProc=WndProc;wndclass.lpszClassName=MP3;wndclass.lpszMenuName=0;wndclass.style=CS_HREDRAW |CS_VREDRAW;if(!RegisterClass(&wndclass)){MessageBox(NULL,L"注册窗口失败!",L"Error Info",MB_OK);return 0;}hwnd=CreateWindowEx(WS_EX_LAYERED,MP3,title,WS_OVE RLAPPED | WS_CAPTION | WS_SYSMENU| WS_MINIMIZEBOX ,CW_USEDEFAULT,CW_USEDEFAULT,310,410,NULL,NULL,hIns tance,NULL);AnimateWindow(hwnd,1000,AW_BLEND|AW_SLIDE);//窗口效果函数//UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){PAINTSTRUCT ps;HDC hdc,hdcmem;HBITMAP hBitmap;BITMAP Bitmap;static HWND ChildHwnd_1=0;static HWND ChildHwnd_2=0;if(message == WM_PRINT || message == WM_PRINTCLIENT) {hdc=(HDC)wParam;hBitmap=LoadBitmap(Hinstance,MAKEINTRESOURCE(IDB_B ITMAP1));GetObject(hBitmap,sizeof(BITMAP),&Bitmap);hdcmem=CreateCompatibleDC(hdc);SelectObject(hdcmem,hBitmap);BitBlt(hdc,0,0,Bitmap.bmWidth,Bitmap.bmHeight,hdcmem,0 ,0,SRCCOPY);DeleteDC(hdcmem);}switch(message){case WM_CREATE:ChildHwnd_1=CreateWindowEx(WS_EX_LAYERED,L"Button", L"Play",WS_VISIBLE|WS_CHILD,50,330,70,30,hwnd,(HMENU)1,0, NULL);ChildHwnd_2=CreateWindowEx(WS_EX_LAYERED,L"Button", L"Stop",WS_VISIBLE|WS_CHILD,190,330,70,30,hwnd,(HMENU)2,0 ,NULL);return 0;case WM_CLOSE:DestroyWindow(hwnd);PostQuitMessage(0);return 0;case WM_COMMAND:switch(wParam){case 1:MP3Player(hwnd,1);break;case 2:MP3Player(hwnd,2);break;}return 0;case WM_PAINT:hBitmap=LoadBitmap(Hinstance,MAKEINTRESOURCE(IDB_B ITMAP1));GetObject(hBitmap,sizeof(BITMAP),&Bitmap);hdc=GetDC(hwnd);hdcmem=CreateCompatibleDC(hdc);SelectObject(hdcmem,hBitmap);BitBlt(hdc,0,0,Bitmap.bmWidth,Bitmap.bmHeight,hdcmem,0 ,0,SRCCOPY);DeleteDC(hdcmem);BeginPaint(hwnd,&ps);EndPaint(hwnd,&ps);return 0 ;}return DefWindowProc(hwnd,message,wParam,lParam);}int MP3Player(HWND hwnd,int fnNum){switch(fnNum){case 1://播放static MCI_OPEN_PARMS open;static MCI_PLAY_PARMS play;static MCIDEVICEID MP3ID;open.dwCallback=0;open.lpstrAlias=NULL;open.lpstrDeviceType=L"MPEG"; //MP3设备open.lpstrElementName=L"该死的温柔.mp3"; //要播放的文件open.wDeviceID=0;mciSendCommand(0,MCI_OPEN,MCI_WAIT| MCI_OPEN_ELE MENT,(DWORD)(LPMCI_OPEN_PARMS)&open);//初始化MP3ID=open.wDeviceID;play.dwCallback=(DWORD)hwnd; //播放程序的窗口句柄play.dwFrom=0;play.dwTo=0;mciSendCommand(MP3ID,MCI_PLAY,MCI_NOTIFY,(DWORD) (LPMCI_OPEN_PARMS)&play);return 0;case 2://停止MCI_GENERIC_PARMS close;close.dwCallback=(DWORD)hwnd;mciSendCommand(MP3ID,MCI_CLOSE,MCI_NOTIFY,(DWOR D) (LPMCI_GENERIC_PARMS)&close);return 0;}return 0;}。
基于mfc音乐播放器的设计与实现(含源文件)

毕业设计(论文)题目音乐播放系统设计专业信息与计算科学年级 2009级1班学号xxxxxxxxxx姓名xxxxx指导教师xx完成时间:目录摘要 (I)Abstract ..........................................................................................................I I 1 前言 (1)1.1软件开发背景及意义 (1)1.2发展现状及趋势 (1)1.3主要研究方法及过程 (2)2 相关技术简介 (2)2.1 VC技术应用的基本现状 (2)2.2 MCI命令接口编程 (2)2.2.1 MCI命令 (3)2.2.2 MCI命令消息接口方式 (4)2.2.3 MCI命令字符串接口方式 (7)3需求分析 (8)3.1功能需求 (8)3.1.1 播放器的基本控制需求 (8)3.1.2功能需求分析 (8)3.2 运行及其它需求分析 (9)3.3 可行性分析 (9)4 软件结构及界面设计 (10)4.1软件结构设计 (10)4.2 GUI界面设计 (10)5详细设计 (11)5.1文件菜单下的详细设计 (11)5.1.1打开文件设计 (11)5.1.2 打开文件夹设计 (13)5.2播放音乐的详细设计 (13)5.3播放列表的详细设计 (14)5.4歌词显示的详细设计 (15)5.5播放器优化的详细设计 (15)6结论 (17)参考文献 (18)致谢 (19)摘要音乐是一种声音符号,表达人的思想感情。
是人们思想的载体之一。
音乐是有目的和内涵的,其中隐含了作者的生活体验,思想情怀。
一款好的pc音乐播放器不仅能够提供好的音乐播放效果,更能够为用户提供方便的操作。
本设计利用C语言和Visual C++ 编辑工具对播放器进行编写。
同时给出了详细的系统设计过程、部分界面图及主要功能运行流程图,本文还对开发过程中遇到的问题和解决方法进行了详细的讨论,该音乐播放器集播放、暂停、停止、快进、快退、下一曲、上一曲、音量调节等功能与一体,性能良好。
基于MFC的音乐播放器vc6.0

afx_msg void OnNexts();
afx_msg void Onexit();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
4.在playerDlg.cpp中的函数如下
// playerDlg.cpp : implementation file
DDX_Control(pDX, m_list, m_list2);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPlayerDlg, CDialog)
//{{AFX_MSG_MAP(CPlayerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlayerDlg dialog
CPlayerDlg::CPlayerDlg(CWnd* pParent /*=NULL*/)
//
#include "stdafx.h"
#include "player.h"
#include "playerDlg.h"
#pragma comment(lib,"winmm.lib")
#include "mmsystem.h"
#include "Digitalv.h"
基于MFC的MP3播放器

研究生堂下考试答卷2011-2012学年第一学期考试科目面向对象方法(VC++)姓名于芳年级2011级专业电子与通信工程2010 年12 月18 日基于MFC的MP3播放器姓名:于芳学号:30125847569 专业:通信工程摘要:多媒体技术的概念和应用出现于20世纪80年代初期,经过十余年的发展,随着计算机科学网络的普及和多媒体技术的发展,已成为计算机领域发展的热点技术,针对目前各种媒体格式,如何简单方便的播放各类媒体已成为人们普遍关注的问题。
本设计就是基于面向对象技术,利用VC++6.0开发出适合多种格式的的多媒体MP3播放器。
该播放器是基于MFC集成开发环境,利用系统的媒体控制接口MCI命令来编程,建立了一个MP3播放器的类CPLAYERDlg,通过调用这个类的函数来实现各种Windows音频格式文件的播放。
它外观简洁,操作简便,支持的播放格式多、系统资源占用少、支持播放列表编辑等功能。
关键词:MP3 MFC 面向对象设计 VC++ MCI一系统设计的基本原理与思路本设计的基本原理就是利用MFC应用程序以及媒体控制接口MCI的基本知识而设计的。
Windows已经提供了一个关于多媒体处理的动态链接库WINMM.DLL,通过调用它所提供的API函数,就可以使用MCI指令进行多媒体方面的操作了。
1.1 MFC简介MFC是Visual C++是核心。
MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC 派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。
每个MFC类都包括了一些函数,函数放到类中,符合C++编程方法。
这些函数,必须通过类定义对象才能使用。
基于MFC多媒体播放器

《C/C++课程设计》项目报告目录1 项目简介 (1)1.1 项目名称 (1)1.2 功能概述 (1)1.3 开发人员及职责 (1)2 需求分析 (1)2.1 功能需求 (1)2.2 性能需求 (2)3 系统设计 (3)3.1 代码设计 (3)3.2 流程图 (13)4 系统实现及测试 (17)5 项目总结 (20)5.1 总体总结 (20)5.2 个人总结 (21)1 项目简介1.1 项目名称多媒体播放器1.2 功能概述此款媒体播放器项目具有以下功能:(1)本地设定目录中包含音频文件的浏览和播放(支持mp3格式)。
(2)本地设定目录中包含图片文件的浏览(支持bmp格式)。
(3)本地设定目录中包含视频文件的浏览和播放(支持mp4格式)。
(4)最近播放列表功能,保存最近播放的10个文件,保存最近追加的10个文件。
视频,音频,图片是分开的,都有最近播放列表和最近追加列表。
1.3 开发人员及职责负责视频模块,以及最后的模块整合,报告的编写负责音频模块,报告的编写负责图片模块,报告的编写2 需求分析2.1. 功能需求本设计将要实现的是一个单机多媒体播放器,可以对音频、视频、图片进行查看。
从其目标功能及特点分析,将本软件功能划分如下:(1)视频播放器:可以打开MP4格式的视频文件。
在本地文件夹中将MP4格式的视频文件添加至播放列表,点击播放,或双击列表里的所选项目,就可跳转至视频播放窗口。
在播放窗口里,查看视频时,有“播放”,“暂停”,“停止”功能。
播放中,还有“前进”,“后退”功能,即快进快退功能,以4秒为一个单位,这个单位也可以在代码中进行修改。
在观看视频时,还有“上一曲,下一曲”功能,即查看之前添加在播放列表里的视频项。
同时,也可以选择播放模式“循环,顺序,随机”,该功能也是基于播放列表实现的。
在右边功能键里,还有音量调节,静音功能。
除此以外,还可以进行全屏浏览,按“ESC”退出全屏。
在主页面,还有两个数据框“最近追加项目”和“最近播放项目”,可以直观地看到最近播放项目,且可以手动清空所有项目。
基于MFC的音乐播放器的实现

基于MFC的音乐播放器的实现作者:余安乾陈伯亨来源:《电脑知识与技术》2020年第30期摘要:利用VisualStudio开发工具基于MFC(Microsoft Foundation Class)实现一个简易的音乐播放器,该文首先简单介绍当前市面上一些音乐播放器和制作播放器的开发工具中QT 与MFC的区别,再详细说明如何使用文件对话框,媒體控制接口设计简易的音乐播放器。
关键词:播放器;MFC中图分类号:G642 文献标识码:A文章编号:1009-3044(2020)30-0080-021 音乐播放器的描述音乐播放器是人们生活中必不可少的东西,任何人都有属于自己心中的那份特殊的情感,音乐即表达情感和寄托情感的语言。
当前比较火热的音乐播放器有QQ音乐,网易音乐,酷狗音乐,当然还有其他小众的播放器,由此可见播放器种类多,但总有符合自己风格的音乐播放器。
设计音乐播放器将用到VisualStudio开发工具,基于MFC设计一款音乐播放器,实现打开音乐文件,点击歌曲列表中的歌曲进行播放、暂停,显示歌曲的时间和歌词和显示背景图片等功能。
2 设计思路制作音乐播放器就像是开发一个软件,要先有思路再去实践。
开发软件是要做什么?所开发的软件要达到怎样的功能?每个功能怎样去实现[1] ?对此,首先需要先思考,对整个过程有个思路。
音乐播放器的主要功能就是播放音乐,首先需要用CFileDialog打开文件对话框选择需要的音乐文件,包括MP3文件,WMA文件,WAV文件,将所需音乐文件的路径一一获取。
其次通过MFC的控件listcontrol显示选择的多首歌曲名字或歌曲路径,listcontrol控件添加的事件将会判断鼠标点击的歌曲所在列表控件的行号,由此获得此歌曲所在的路径。
最后交给媒体控制接口提供的mciSendCommand函数实现打开音乐文件、播放音乐、暂停音乐和控制音量等功能。
进一步优化时,要实现歌曲的时间显示和歌词的显示则都需要定时器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一步:打开vc6.0,建立如图所示mfc工程文件选择基于对话框的确定删除所有空间,建立如图所示对话框属性如下:播放IDC_open;添加IDC_fileopen;暂停IDC_pause;删除IDC_del;停止IDC_stop;退出IDC_exit;音乐名编辑框IDC_filename;音量控制滑块IDC_SLIDER1;音量控制编辑框IDC_vol;建立类向导对应如下:在工程文件,右键,插入,bitmap位图引入你想插入的背景图,必须是bmp格式的进入你的dlg.cpp文件在onpaint函数下添加代码void CMp3Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint 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(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP6); /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 ,SRCCOPY);}}编译运行,你就会看到背景有图片了。
插入-类,找到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#pragma once#endif // _MSC_VER > 1000#include "Mmsystem.h"class Mp3{public:Mp3();virtual ~Mp3();HWND m_hWnd; //¼Ç¼µ±Ç°´°¿ÚµÄ¾ä±úDWORD DeviceID;//Ö¸¶¨²¥·ÅÒôÀÖµÄÉ豸IDMCI_OPEN_PARMS mciopenparms; //Ö¸¶¨´ò¿ªÒôÀÖÎļþµÄ²ÎÊývoid Load(HWND hwnd,CString Strfilepath);DWORD getinformation(DWORD item);void Play();void Pause();void resum();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 "Mp3²¥·ÅÆ÷.h"#include "Mp3.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////Mp3::Mp3(){}Mp3::~Mp3(){}void Mp3::Load(HWND hwnd,CString Strfilepath){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)&mciopenparms)){//Èç¹û´ò¿ªÊ§°Ü£¬½«³ö´íÐÅÏ¢´æÔÚbuffer²¢ÏÔʾ³ö´í¾¯¸æchar buffer[256];mciGetErrorString(dwReturn,buffer,256);MessageBox(hwnd,buffer,"³ö´í¾¯¸æ",MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);}DeviceID=mciopenparms.wDeviceID; //¶àýÌåÉ豸ÀàÐͱàºÅ}DWORD Mp3::getinformation(DWORD item){//MCI½Ó¿Ú¶ÔÏóµÄ״̬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; //ÿ´Î´ÓÍ·²¥·Å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(DeviceID,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 DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);hour=0;minute=0;second=0;}dlg.cpp中头文件如下:#include "stdafx.h"#include "Mp3²¥·ÅÆ÷.h"#include "Mp3²¥·ÅÆ÷Dlg.h"#include "Mmsystem.h"#include "Digitalv.h"#include "Mp3.h" //ÒôÁ¿¿ØÖÆÓõ½#pragma comment(lib,"Winmm.lib")#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif在对话框中双击添加添加onfileopen函数,代码如下void CMp3Dlg::Onfileopen(){char filefiler[]="mp3文件(*.mp3)|*.mp3|""wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|";CFileDialogdlg(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(255,255,203));//设置数字显示的颜色mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度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_list.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",hour,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 your control notification handler code hereCString strtemp;Mp3 mp3;GetDlgItemText(IDC_pause,strtemp);//获取按钮状态if (pare("暂停")==0){mp3.Pause();SetDlgItemText(IDC_pause,"继续");KillTimer(0);//取消计数器的显示}if (pare("继续")==0){mp3.resum();SetTimer(0,1000,NULL);SetDlgItemText(IDC_pause,"暂停");}}void CMp3Dlg::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("%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.GetCurSel();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 hereCDialog::OnCancel();}ctrl+w打开类向导,如图,添加ontimer函数代码如下:void CMp3Dlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default CString mtime;Mp3 mp3;second++;CClientDC dc(this);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);DWORD cdf=mp3.getinformation(MCI_STATUS_POSITION);DWORD cdfrom;cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAM E(cdf));//获取当前播放文件的信息UpdateData(false);CDialog::OnTimer(nIDEvent);}ctrl+w打开类向导添加函数如下void CMp3Dlg::OnDblclkList() //在列表中选中,双击左键播放音乐{CString mtime;Mp3 mp3;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);//显示时间进度dc.TextOut(280,128,mtime);CString strfilename;int index=m_list.GetCurSel();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::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) {// TODO: Add your control notification handler code hereUpdateData(true);m_int=m_slider.GetPos()/10;Setvolumn(m_slider.GetPos());UpdateData(false);*pResult = 0;}打开类向导,添加函数如下void CMp3Dlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code hereSetvolumn(m_slider.GetPos());*pResult = 0;}添加声音设置函数如下DWORD CMp3Dlg::Setvolumn(DWORD vol){MCI_DGV_SETAUDIO_PARMS mcisetvolumn;mcisetvolumn.dwCallback=NULL;mcisetvolumn.dwItem=MCI_DGV_SETAUDIO_VOLUME;mcisetvolumn.dwValue=vol;MCI_OPEN_PARMS mciopenparms;DWORD DeviceID;DeviceID=mciopenparms.wDeviceID;mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_SETAU DIO_ITEM,(DWORD)(LPVOID)&mcisetvolumn);// return mcisetvolumn.dwValue;return 0;}到此已经基本完成了,我们可以试听一下接下来我们可以到包成exe可执行文件,为了去掉那个不好看的图标,我们可以进入res文件夹,把原来的图标删掉,不过,你要放入一个cio格式的图片作为图标,cio格式网上有很多转换的,删掉原图标后,程序会自动生成一个你放进去的图标。