用GDI重绘控件做的播放器。播放MP3格式的音乐。音乐部分用MCI接口。控件部分进行了自绘。
源码暂时在优化。还有小功能没完善。比如歌曲列表歌曲的存储。不用没关闭打开一次就要添加一次。比如歌词同步显示。还有播放模式还没做。就只有顺序播放模式。
等功能完善源码优化后。在年后放出代码。谢谢大家支持。放出程序。大家可以先看看小样。
开发语言VC++/MFC 开发环境VS2010 全程序没有使用一个dll文件。自绘部分依靠高仿qq界面部分源码。和自己重绘三个控件源码。
大概用到的响应函数
#pragma once
#include "DlgBase.h"
#include "Vocal.h"
// MusicPlayer 对话框
class CMusicPlayer : public CDlgBase
{
//DECLARE_DYNAMIC(MusicPlayer)
public:
CMusicPlayer(CWnd* pParent = NULL); // 标准构造函数
//virtual ~MusicPlayer();
// 对话框数据
enum { IDD = IDD_WavPlayer };
protected:
HICON m_hIcon;
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
afx_msg LRESULT OnVoiceThumbMove(WPARAM wParam, LPARAM lParam); //声音滑块移动消息响应函数
afx_msg LRESULT OnPlay(WPARAM wParam, LPARAM lParam); //播放消息函数
afx_msg LRESULT AddVocal(WPARAM wParam, LPARAM lParam); //添加歌曲消息函数
afx_msg LRESULT OnDown(WPARAM wParam, LPARAM lParam); //歌曲列表换页下消息函数
afx_msg LRESULT OnUp(WPARAM wParam, LPARAM lParam); //歌曲列表换页上消息函数
afx_msg LRESULT OnDelete(WPARAM wParam, LPARAM lParam); //歌曲列表删除歌曲消息函数
afx_msg LRESULT OnNext(WPARAM wParam, LPARAM lParam); //歌曲下一首消息函数
afx_msg LRESULT OnPre(WPARAM wParam, LPARAM lParam); //歌曲上一首消息函数
public:
afx_msg void OnTimer(UINT_PTR nIDEvent);
virtual BOOL OnInitDialog();
virtual void InitUI(CRect rcClient);
virtual void OnSize(CRect rcClient);
afx_msg void OnMouseMove(UINT nFlags, CPoint point); //鼠标事件
virtual BOOL PreTranslateMessage(MSG* pMsg); //键盘事件
unsigned long GetVocalTime(CString s); //获取歌曲总长度
void PlayVocal(); //播放歌曲函数
void ResumeVocal(); //暂停歌曲函数
void StopVocal(); //停止歌曲函数
void WaitVocal(); //挂起歌曲函数
DWORD getinfo(DWORD item); //获取歌曲状态函数
void SetVocalVol(DWORD vol); //调节歌曲音量函数
public:
//---------------slider控件相关--------------
CPoint oldP,oldP2;
bool isDown;
CRect vbr,r1,r2,vbr2,pr1,pr2;
int min,max,pmin,pmax;
//------------------------------------------
bool isPlay;
CArray<Vocal,Vocal>m_VocalArray; //歌曲容器
int ListCount; //歌曲数量
int realPage;
int col;
int vpage;
//-------------MCI播放相关-----------------
DWORD cdto,cdfrom,cdlen,m_count;
bool isResume;
CString playPath;
int PlayID;
int vocalID;
int minute,second,hour;
int tlen;//时间长度
//--------------------------------------
};
自定义部分控件
//控件
#define ST_TIMEM 2016
#define ST_TIMES 2017
#define ST_NAME 2018
#define ST_PlAYLIST 2001 //播放列表 STATICTEST 静态文本控件
#define BT_PLAY 2002 //播放按钮 BUTTON 控件
#define BT_PRE 2003
#define BT_STOP 2004
#define BT_DELETE 2005
#define BT_NEXT 2006
#define BT_VOICE 2007
#define BT_ADD 2008
#define BT_LINE1 2009
#define BT_THUMB1 2010
#define BT_THUMB2 2011
#define BT_UP 2012
#define BT_DOWN 2013
#define BT_ONLINE 2014
#define BT_SELECT 2015
下载地址:点击打开链接