功能: 实现播放、暂停、停止、上一曲、下一曲、删除、删除所有、单曲循环、全部循环、 (文件)文件路径显示、自定义音乐文件、播放进度、播放时间、音量设置(参考了网上的资料); 利用文件读写:保存音乐文件、保存上次未播放完的音乐信息 未完成的功能:歌词、进度条控制播放,没对界面进行处理 播放器到此结束了有时间我会把未完成的功能也写上的 大家可以下载下来参考参考,或者在此之上加一些功能 |
头次连着几天写一个软件。如果稍加修改下界面和一些功能。。。还不错的。。
呵呵。。
遇到的问题
1、CListCtrl问题刚开始我把它的属性设置成了排序的。。。如果显示出来的话只能显示出最后一个路径
2、CFileDialog问题读取多个文件后不能直接利用API来获得文件名
自己封装了一个函数来获得
//得到某个字字符最后出现的位置
int FindLast(CString cstr,char tChar)
{
int tRet;
char *pChar;
//库函数strchr。返回该字符在串中最后位置的指针
pChar=strrchr(cstr,tChar);
if(pChar)
tRet=int(pChar-cstr); //计算下标
else
tRet=-1;
return tRet;
}
3、播放模式问题
没想到什么好的办法。。。只好利用定时器来解决此问题了
if (nIDEvent == LOOP)
{
if (GetPlayMode(MCI_STATUS_MODE)==MCI_MODE_STOP)
{
OnStop();
OnPlay();
}
}
else if (nIDEvent == ALLLOOP)
{
if (GetPlayMode(MCI_STATUS_MODE)==MCI_MODE_STOP)
{
OnStop();
m_PlayPos++;
if (m_PlayPos == m_SaveArray.GetSize())
{
m_PlayPos = 0;
}
OnPlay();
}
}
4、播放时间的显示
int Minute = 0;
int Second = 0;
unsigned long tTime;
CString tTemp;
tTime = GetPlayMode(MCI_STATUS_POSITION);
tTime = tTime/1000;
Minute = tTime/60;
Second=tTime%60+1;
if(Second==60)
{
Second=0;
}
tTemp.Format("%d:%d/%d:%d",Minute,Second,m_Minute,m_Second);
this->SetDlgItemText(IDC_TIME,tTemp);
5、最后是音量的设置了
参考了网上的代码
主要利用了以下的消息函数来完成此功能
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg LONG OnMixerCtrlChange(UINT wParam, LONG lParam);
封装的函数
//音量控制
BOOL amdUninitialize();
BOOL amdInitialize();
BOOL amdGetMasterVolumeControl();
BOOL amdGetMasterVolumeValue(DWORD &dwVal) const;
BOOL amdSetMasterVolumeValue(DWORD dwVal) const;