用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函数实现打开音乐文件、播放音乐、暂停音乐和控制音量等功能。
进一步优化时,要实现歌曲的时间显示和歌词的显示则都需要定时器。
MFC音乐播放器(MCI)
MCI的命令消息接口,所有MCI命令消息都是通过mciSendCommand函数发送的,函数声明为:MCIERROR mciSendCommand(MCIDEVICEID wIDDevice,//设备的ID,在打开设备时不用该参数UINT uMsg,//命令消息DWORD fdwCommand,//命令消息的标志DWORD dwParam//指向包含命令消息参数的结构);//若成功则返回0,否则返回错误码编辑本段MCI简介对于程序员来说,可以把MCI理解为设备面板上的一排按键,通过选择不同的按键(发送不同的MCI命令)可以让设备完成各种功能,而不必关心设备内部实现。
比如,对于play,视盘机和CD机有不同的反应(一个是播放视频,一个播放音频),而对用户来说却只需要按同一按钮。
应用程序通过向MCI发送命令来控制媒体设备。
MCI命令接口分命令字符串和命令消息两种,两者具有相同的功能。
命令字符串具有使用简单的特点,但是它的执行效率不如命令消息。
编辑本段mciSendCommand详细MCI的命令消息接口提供了C语言接口,它速度更快,并且更能符合C/C++程序员的需要。
所有MCI命令消息都是通过mciSendCommand函数发送的,函数声明为:MCIERROR mciSendCommand(MCIDEVICEID wIDDevice,//设备的ID,在打开设备时不用该参数UINT uMsg,//命令消息DWORD fdwCommand,//命令消息的标志DWORD dwParam//指向包含命令消息参数的结构);//若成功则返回0,否则返回错误码变量wDeviceID用来保存设备的ID,系统用ID来标识不同的设备,以保证命令发给正确的对象。
void CTttView::OnMyMenu(){MCI_OPEN_PARMS mciOpen;UINT wDeviceID;mciOpen.lpstrDeviceType="avivideo";mciOpen.lpstrElementName="myfolder\\clock.avi";mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)&mciOpen);wDeviceID=mciOpen.wDeviceID;MCI_PLAY_PARMS mciPlay;mciSendCommand(wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)&mciPlay););----MCI可以通过mciSendCommand()和mciSendString()来完成,本文仅使用mciSendCommand()函数。
MFC音乐播放器傻瓜教程
MFC音乐播放器傻瓜教程代码下载地址1、建立工程 ..................................................................... .. (2)1、建立一个MFC工程,命名为Tao_Music ..............................................................32、选择为基本对话框 ..................................................................... .. (3)、包含WindowsSockts ................................................................. ........................... 4 34、使用静态链接库[方便一会直接生成的exe文件单独可以发布] (5)2、搭建界面...................................................................... (5)1、拖入控件: .................................................................... (5)2、控件拖入并摆好 ..................................................................... . (6)3、控件属性设置: .................................................................... ............................. 7 3、写代码实现功能 ..................................................................... . (15)1、变量绑定: .................................................................... . (15)2、加入图片资源 ..................................................................... .. (16)3、新建mp3类: .................................................................... .. (17)4、修改Tao_MusicDlg.h.......................................................... (20)5、修改Tao_Music.cpp........................................................... . (21)6、功能实现: .................................................................... . (32)7、加一个TImer消息使时间跑起来~ ..................................................................... .39、给音量控制滑块加消息,使音量控制实现 ...........................................................42 8 编译运行完工~ ..................................................................... .. (43)1、建立工程1、建立一个MFC工程,命名为Tao_Music2、选择为基本对话框3、包含Windows Sockts[因为要用网络功能]4、使用静态链接库 [方便一会直接生成的exe文件单独可以发布]2、搭建界面1、拖入控件:拖入7个用于播放控制的button,一个picture控件,一个控制音量的滑块。
MFC做音乐播放器——你懂的
前言:音乐播放器其实我在大一的时候就用非常生硬的语法写出过一个非常简陋的播放器。
这次写的这个是以前那个的加强版。
虽然说还是有很多bug,而且我至今不知道那些BUG是什么地方的问题。
先给个截图吧,播放器的界面:其实看着还是有那么回事的。
恩,其实除了波形和在线下载的话,功能和酷狗,以及千千静听等播放器的功能是一样的。
音乐播放器的关键是播放音乐,所以第一步是要设计一个类,这个类拥有各种各样的播放音乐的能力。
我设计的类名字叫Playerclass Player{public:Player();virtual ~Player();void Play();//播放函数void Pause();//暂停函数void Stop();//停止函数void Jump(DWORD pos);//这个函数是用来通过直接拖动进度条,然后播放从歌曲的相应位置播放的函数void Read(CString str);//这个函数必须在所有函数的前面调用,他有一个传入参数,是指MP3文件的路径void SetVolume(DWORD vol);//音量大小的设定。
这个不难MCI_STATUS_PARMS GetMode();//这个比较关键,是获得当前的播放状态(一首歌是否播放完了就是靠他)MCI_STATUS_PARMS GetNow();//当前是播放的歌曲第几分第几秒?可以用来改变时间栏和进度条MCI_STATUS_PARMS GetLenth();//获得歌曲的长度。
(时间)private:MCI_PLAY_PARMS m_play;MCI_OPEN_PARMS m_open;MCIDEVICEID m_dID;HWND m_parent;MCI_STATUS_PARMS m_status;MCI_SEEK_PARMS m_seek;MCI_STATUS_PARMS m_mode;};各个函数(可以作为以后MCI函数的查阅手册)实现方法是:void Player::Read(CString str){m_dID=NULL;m_open.lpstrElementName=str;mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&m_o pen);//MCI打开文件m_dID=m_open.wDeviceID;}void Player::Play(){m_play.dwCallback=(DWORD)m_parent;mciSendCommand(m_dID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&m_play);//播放.....下面就不写注释了}void Player::Pause(){mciSendCommand(m_dID,MCI_PAUSE,NULL,NULL);void Player::Stop(){mciSendCommand(m_dID,MCI_CLOSE,NULL,NULL);m_status.dwReturn=0;}MCI_STATUS_PARMS Player::GetLenth(){m_status.dwItem=MCI_STATUS_LENGTH;mciSendCommand(m_dID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&m_s tatus);return m_status;}MCI_STATUS_PARMS Player::GetNow(){m_status.dwItem=MCI_STATUS_POSITION;mciSendCommand(m_dID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&m_s tatus);return m_status;}MCI_STATUS_PARMS Player::GetMode(){m_mode.dwItem=MCI_STATUS_MODE;mciSendCommand(m_dID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&m_ mode);return m_mode;}void Player::Jump(DWORD pos){m_seek.dwTo=pos;mciSendCommand(m_dID,MCI_SEEK,MCI_TO|MCI_WAIT,(DWORD)(LPVOID)&m_seekmciSendCommand(m_dID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&m_play);}void Player::SetVolume(DWORD vol){MCI_DGV_SETAUDIO_PARMS mcivol;mcivol.dwCallback=(DWORD)m_parent;mcivol.dwItem=MCI_DGV_SETAUDIO_VOLUME;mcivol.dwValue=vol;mciSendCommand(m_dID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_ SETAUDIO_ITEM,(DWORD)(LPVOID)&mcivol);}基本上都是运用mciSendCommand这个函数,传入不同的参数,就可以达到不同的效果。
MFC调用Windows Media Palyer实现多媒体播放器
新建了一个MFC工程OpenVideo,然后添加Windows Media Player控件;Windows Media Player控件的添加:选择菜单Project->Add to Project中的Components and Controls命令,弹出Components and Controls Gallery对话框。
然后双击Choose a component to insert into your project:中的Registered ActiveX Controls,在该文件夹中选择Windows Media Player,单击Insert,在Insert this component?中选择“确定”,将弹出Confirm Classes窗口,在列表框中有CWMPPlayer4等各种类,单击OK将返回到Components and Controls Gallery界面。
最后单击“Close”返回VC++开发界面。
自此,Windows Media Player的类都已加载到MFC的OpenVideo工程中为Windows Media Player插件添加一个关联的变量m_Ctrplay,在窗口类中定义private的CString型全局变量m_strFilePathName;添加四个按钮和一个文本编辑框,添加相应的响应函数,代码如下:void CMediaPlayDlg::OnOpen(){// TODO: Add your control notification handler code hereCFileDialog dlg(TRUE,_T(""),_T(""),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("(*.*)|*.*|(*.mp3)|*.mp3|(*.avi)|*.avi|"));if (dlg.DoModal()){m_strFilePathName=dlg.GetPathName();SetDlgItemText(IDC_EDIT,m_strFilePathName);//文本编辑框IDC_EDIT显示打开的文件}}void CMediaPlayDlg::OnPlay(){// TODO: Add your control notification handler code hereif (m_strFilePathName!=""){m_Ctrplay.SetUrl(m_strFilePathName);}SetWindowText(_T(m_strFilePathName)); //标题栏显示正在播放的文件}void CMediaPlayDlg::OnStop(){// TODO: Add your control notification handler code herem_Ctrplay.close();}void CMediaPlayDlg::OnClose(){// TODO: Add your control notification handler code hereCMediaPlayDlg::OnOK();}。
使用微软MCI播放音频
VC下音频文件的播放杨晨引子首先说明一点,我学得不好,感觉没能较好的完成党交给的重任,呵呵。
我这几天一直没有看关于播放声音的东东。
因为一方面感觉似乎单从我们要完成的五子,炸弹程序来看,我们现在已有的知识应该已经够用了。
另一方面,在VC下播放音频是一项很大很杂的东西,我自己不想在这上面花费过多的时间。
再有就是我这个文章(应该叫随笔,我想到哪写到哪,没有条理见谅)早写一天晚写一天对大家没有影响,毕竟这个东东相对于我们的程序是独立的。
恩,由于我看的东西也挺杂的,手边也没有比较权威的资料,看了一些msdn上的东东,限于英语水平有限,只是自己理解了一些,还不知对不对,所以很多东西我不能乱言,因为这样可能会对你有所误导。
下面说的大多参照网上或有些书上一些强人的观点,当然也有很多我自己的语言,g你要看着些地方不爽可以不屑于顾。
OK,开始了。
Visual C++对多媒体的支持对于一般的应用程序来说,Visual C++ 可以说是包罗万象,然而令人遗憾的是,几乎没有听说过Visual C++ 对多媒体提供过什么支持,甚至有人说Visual C++不适合多媒体编程。
若是我们完全使用Visual C++的类库而不想点花招的话,恐怕连最一个简单的RPG 游戏都编不出来。
对于一个需要大量动画、声音的多媒体应用程序来说,Visual C++ 最多提供了一个外壳,而编制一个优秀的声音、动画引擎的任务,就落到了程序员的身上。
上面的话不是我说的,我接着说一句:那么,如何开发这个引擎,这个重任有可能以后就落的你的头上了。
需要你针对你的应用程序去组织类.大的不太好,小的应用程序应该完全凑合。
Windows的多媒体服务功能Windows 提供了丰富的多媒体服务功能,包括大量从低级到高级的多媒体API函数。
利用这些功能强大的API,用户可以在不同层次上编写多媒体应用程序.这里简要地介绍一些最常用的多媒体服务。
1,高级音频函数.MessageBeep、PlaySound和sndPlaySound。
用MFC做MP3音乐播放器——超实用
第一步:打开,建立如图所示mfc工程文件选择基于对话框的确定删除所有空间,建立如图所示对话框属性如下:播放 IDC_open;添加 IDC_fileopen;暂停 IDC_pause;删除 IDC_del;停止 IDC_stop;退出 IDC_exit;音乐名编辑框 IDC_filename;音量控制滑块 IDC_SLIDER1;音量控制编辑框 IDC_vol;建立类向导对应如下:在工程文件,右键,插入,bitmap位图引入你想插入的背景图,必须是bmp格式的进入你的文件在onpaint函数下添加代码void CMp3Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this);" #include ""#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif"#include "Mp3²¥·ÅÆ÷"#include ""#include ""#include "" p3)|*.mp3|""wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|";CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filef iler);if ()==IDOK){CString strfilepath=();CString strfilename=();SetDlgItemText(IDC_filename,strfilename);CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;(RGB(124,252,0));" #include "Mp3播放器"#include ""#include ""#include "" ." menu item to system menu.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;(IDS_ABOUTBOX);if (!()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}The framework does this automaticallyFor MFC applications using the document/view model,void CMp3Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); HCURSOR CMp3Dlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CMp3Dlg::Onexit(){p3)|*.mp3|""wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|";CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filef iler);if ()==IDOK){CString strfilepath=();CString strfilename=();SetDlgItemText(IDC_filename,strfilename);CString mtime;CClientDC dc(this);hour=0;minute=0;second=0;(RGB(124,252,0));"#include ""#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif////////////////////////////////////////////////////////////////////////#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 ""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_)。
基于MFC运用windows media player控件实现的多媒体播放器
基于MFC运用windows media player控件实现的多媒体播放器设计平台PC(windows 7 x64),Visual C++ 6.0设计框图一.工程创建本程序基于MFC的对话框模式,起名为MediaPlayer。
二. 添加Windows Media Player 控件在对话框的空白处点击右键选择“Insert ActiveX control”,在弹出的对话框中找到Windows Media Player。
(因为Win7系统中没有ActiveMovieControl控件所以就用以上控件代替了。
)三.为Windows Media Player 控件设置变量在已经添加好的控件上单击右键选择“ClassWizard”,在弹出的窗口中切换到“Member Variables”一栏,找到刚刚添加的控件的ID,选中它然后在右侧的按钮中点击“Add Variables”,然后如图所示:这样就添加成功了。
此时在源文件的对话框中,系统会自动生成必需的媒体实现文件。
四.播放器界面设计设计的界面如下图所示,其中播放控制按钮有打开文件,播放,暂停,停止,快退,快进,播放列表,全屏,退出,关于。
然后还有音量控制,播放模式,播放进度,列表选项的相关控制器件。
控件ID与变量关联如下:控件ID 变量类型变量名称WMPlayer IDC_OCX1 CWMPPlayer4 m_playerListControl IDC_LIST1 CListCtrl m_listCtrlSlider IDC_SLIDER1 CSliderCtrl m_scheduleSlider IDC_SLIDER2 CSliderCtrl m_VOLUME Radio Button IDC_ORDER int m_order 按钮控件的ID和对应的响应函数名称如下:控件名称ID 响应函数名称打开文件IDC_OPEN OnOpen()播放IDC_PLAY OnPlay()暂停IDC_PAUSE OnPause()停止IDC_STOP OnStop()快退IDC_REVERSE OnReverse()快进IDC_FORWARD OnForward()播放列表IDC_PLAYLIST OnPlayList()全屏IDC_FULLSCREEN OnFullScreen()退出IDC_EXIT OnExit()- IDC_SUB OnSub()+ IDC_ADD OnAdd()上一曲IDC_LAST OnLast()下一曲IDC_NEXT OnNext()关于IDC_ABOUT OnAbout()静音IDC_SILENCE OnSlience() 选中项上移IDC_LISTCHOOSEUP OnListchooseup()选中项下移IDC_LISTCHOOSEDOWN OnListchoosedown()删除选中项IDC_LISTCHOOSEDELETE OnListchoosedelet()删除所有项IDC_LISTDELETEALL OnListdeleteall()导入列表IDC_LISTIMPORT OnListimport()导出列表IDC_LISTEXPORT OnListexport() 五.功能实现(1)播放控制Windows Media Player 控件初始化在添加该控件的时候自动生成的多个库文件,不同的文件实现播放器各个方面的功能,所以需要我们手动将他们联系起来。
用C#开发的简单MP3播放器
一、软件说明:功能说明:一个简易小巧的MP3播放器,可以播放已经下载好的MP3格式的音乐。
解决什么样的实际问题:市场上的音乐播放器大都占用资源比较大,而且需要联网,即使播放本地音乐,也会占用较多的网速,而这款播放器解决了这些问题。
(虽然还是有很多缺陷,但用起来还是比较方便的。
)性能说明:可以播放单首或多首歌曲,可以保存或清空当前播放列表,支持列表循环,顺序播放,单曲循环。
(但目前只支持MP3格式。
)程序类型说明:这个播放器是winform应用程序。
二、软件设计软件整体结构图及模块划分:软件整体结构图:控制模块:歌曲列表显示区:在VS的“解决方案资源管理器”中的文件说明:整个项目的文件如下:其中,Properties中所包含的的文件有:这里包含的是定义程序集属性的文件,用来设定生成的有关程序集的常规信息dll文件的一些参数。
引用中包含的文件有:这里包含的是这个项目所用的的一些类库信息。
Form1.cs中包含有:这些是窗体的设计信息,而Program.cs是整个源程序的入口。
各模块对应的主要对象或方法:控制模块中主要用到的是axWindowsmediaPlayer控件以及MenuStrip控件。
其中Windows media Player 控件用到的方法属性主要有:axWindowsMediaPlayer1.BeginInit(); //初始化axWindowsMediaPlayer1.settings.autoStart; //自动播放axWindowsMediaPlayer1.settings.setMode("shuffle", false); //顺序播放axWindowsMediaPlayer1.settings.enableErrorDialogs;axWindowsMediaPlayer1.settings.balance;axWindowsMediaPlayer1.settings.mute;axWindowsMediaPlayer1.settings.volume;MenuStrip控件用到的方法事件有:privatevoid打开文件ToolStripMenuItem1_Click(object sender, EventArgs e);privatevoid添加歌曲ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid添加文件夹ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid退出ToolStripMenuItem_Click(object sender, EventArgs e); privatevoid清空列表ToolStripMenuItem1_Click(object sender, EventArgs e);privatevoid顺序播放ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid单曲循环ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid随机播放ToolStripMenuItem_Click(object sender, EventArgs e);数据库设计或数据文件说明:由于播放器使用数据量较小,故采用TXT保存歌曲文件列表。
自制MP3播放器代码生成器小工具(附代码)
③选择同步歌词(LRC歌词:不需要同步歌词这步可忽略。什么是LRC歌词,请参阅《LRC歌词格式简介》。LRC歌词可以从网络下载,下载的LRC歌词注意与选用的音乐版本要配套。LRC歌词下载后最好复制、粘帖到记事本备用。
④蓝线上下的图标与“填空栏目”。蓝线以上的图标供移动定位到播放器中,蓝线以下的“填空栏目”设置播放器元素的长度、形状、颜色等。每个“填空栏目”都有一个默认设置,如需改变设置,先选中(拉黑),后输入设置。
⑤博客预览方式。点击“生成代码”(步骤7)后,博客使用的代码已经生成,并自动复制了代码。此时登录您的博客→发博文→点“显示不满意,再回到《制作我的MP3播放器》进行修改。 “生成代码”后也可在HTML编辑浏览器中浏览效果,请点击HTML编辑浏览器,出现浏览器窗口后,鼠标指向浏览器黑框之中,按鼠标右键,选择“粘贴”。再点浏览器的“运行代码”即可浏览你制作的效果了。
(3)开始制作:
①按照七个步骤依次做一遍:1.尺寸与背景→2.选择按钮→3.时间、进度条→4.名称或歌词→5.歌曲列表→6.歌曲与歌词→7.预览与生成代码。
②仔细阅读“操作说明”。每个步骤都有“操作说明”,将鼠标指向 “操作说明”即可显示。
③重做或修改。如果需要重做或修改哪个步骤,点击“步骤名”进去修改。
自制MP3播放器代码生成器小工具(附代码)
自制MP3播放器代码生成器
一、制作说明:
(1)浏览欣赏:先浏览生成器封面,看完7个制作步骤的简要演示之后,点击播放按纽欣赏歌曲。
(2)构思准备:有了总体印象之后,就可以开始构思您的播放器,做好以下几个准备工作:
- 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格式网上有很多转换的,删掉原图标后,程序会自动生成一个你放进去的图标。