#pragma comment(lib,"Vfw32.lib")
#include <vfw.h>
class CPlay
{
CStringArray pathArray;
HWND hPlay ;
enum State{normal,playing,paused};
enum PlayMode{once,loopOne,loopAll,loopOnce,loopRnd};
/*
once: 单曲播放
loopOne: 单曲循环
loopAll: 所有循环
loopOnce: 所有曲目循环一次
loopRnd: 随机循环
*/
State state;
UINT i; // 当前歌曲 index
PlayMode mode;
public:
HWND hParent;
public:
void SetMode(UINT u)
{
switch(u){
case 0:
mode = once;
break;
case 1:
mode = loopOne;
break;
case 2:
mode = loopAll;
break;
case 3:
mode = loopOnce;
break;
case 4:
;
}
}
CPlay(HWND hwndParent = NULL)
{
hParent = hwndParent;
hPlay = NULL;
state = normal;
i = 0;
}
~CPlay()
{
}
void Select(UINT ii){ i = ii; }
void add(LPTSTR str){ pathArray.Add(str); }
CString get(UINT i){ return pathArray.GetAt(i); }
void next()
{
i++;
if(i >= GetCount() ) i=0;
stop();
play();
}
void PlayPauseResume()
{
switch(state){
case normal:
play();
break;
case playing:
pause();
break;
case paused:
resume();
}
}
private:
void play()
{
hPlay = MCIWndCreate(hParent,AfxGetInstanceHandle(),WS_CHILD|MCIWNDF_NOMENU,get(i));
MCIWndPlay(hPlay);
state = playing;
}
void pause()
{
MCIWndPause(hPlay);
state = paused;
}
void resume()
{
MCIWndResume(hPlay);
state = playing;
}
UINT GetCount()
{
return pathArray.GetSize();
}
public:
void stop()
{
MCIWndStop(hPlay);
MCIWndDestroy(hPlay);
state = normal;
}
void rePlay()
{
if(state != normal){
if(MCIWndGetPosition(hPlay) >= MCIWndGetLength(hPlay)){
switch(mode){
case once:
stop();
break;
case loopOne:
stop();
play();
break;
case loopAll:
i++;
if(i >= GetCount() ) i=0;
stop();
play();
break;
case loopOnce:
i++;
if(i >= GetCount())
stop();
else{
stop();
play();
}
break;
case loopRnd:
;
}
}
}
}
};
C++ :音乐播放类
最新推荐文章于 2024-09-15 11:40:06 发布