用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
下载地址:点击打开链接