⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audioplaydlg.cpp

📁 一款用与WINCE.0下播放MP3的播放软件,可以播放多中音频文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// AudioPlayDlg.cpp : implementation file
//

#include "stdafx.h"
#include "AudioPlay.h"
#include "AudioPlayDlg.h"
#include "Coordinate.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

typedef enum {
	AUDIO_CTRL_CLOSE,
	AUDIO_CTRL_MINIMIZE,
	AUDIO_CTRL_PLAY,
	AUDIO_CTRL_PAUSE,
	AUDIO_CTRL_STOP,
	AUDIO_CTRL_BACKWARD,
	AUDIO_CTRL_FORWARD,
	AUDIO_CTRL_OPEN,
// 	AUDIO_CTRL_RAND,
// 	AUDIO_CTRL_ONE,
// 	AUDIO_CTRL_ALL,
	AUDIO_CTRL_VOLUME,
	AUDIO_CTRL_PROSLIDER,
	AUDIO_CTRL_VOLSLIDER,
	AUDIO_CTRL_COUNT,
}AUDIOCTRL;


POINT AudioBtnPos[AUDIO_CTRL_COUNT] ={
	{CLOSE_BTN_X, CLOSE_BTN_Y},			//close
	{MINI_BTN_X, MINI_BTN_Y},			//Minimize
	{PLAY_BTN_X, PLAY_BTN_Y},			//play
	{PAUSE_BTN_X, PAUSE_BTN_Y},			//pause
	{STOP_BTN_X, STOP_BTN_Y},			//stop
	{BACKWARD_BTN_X, BACKWARD_BTN_Y},	//backward
	{FORWARD_BTN_X, FORWARD_BTN_Y},		//forward
	{OPEN_BTN_X, OPEN_BTN_Y},			//open
// 	{RAND_BTN_X, RAND_BTN_Y},			//rand
// 	{ONE_BTN_X, ONE_BTN_Y},				//repeat one
// 	{ALL_BTN_X, ALL_BTN_Y},				//repeat all
	{VOL_BTN_X, VOL_BTN_Y},				//volume
	{PRO_SLIDE_X, PRO_SLIDE_Y},			//program slide
	{VOL_SLIDE_X, VOL_SLIDE_Y}			//volume slide
};
 
CRect RectAudioTitle(AUDIO_TITLE_LEFT, AUDIO_TITLE_TOP, AUDIO_TITLE_RIGHT, AUDIO_TITLE_BOTTOM);
CRect RectAudioTime(TIME_LEFT, TIME_TOP, TIME_RIGHT, TIME_BOTTOM);

CRect RectModeAll(ALL_BTN_X,ALL_BTN_Y,ALL_BTN_R,ALL_BTN_B);
CRect RectModeOne(ONE_BTN_X,ONE_BTN_Y,ONE_BTN_R,ONE_BTN_B);
CRect RectModeRand(RAND_BTN_X,RAND_BTN_Y,RAND_BTN_R,RAND_BTN_B);


extern SysInfoData	SysData;
extern CStringList	g_StrList;
int			g_nCurSelItem = 0;

void IncreaseVolume();
void DecreaseVolume();


/////////////////////////////////////////////////////////////////////////////
// CAudioPlayDlg dialog


CAudioPlayDlg::CAudioPlayDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAudioPlayDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAudioPlayDlg)
	//}}AFX_DATA_INIT
	memset(m_chFileName,0,sizeof(TCHAR)*MAX_STRING);
	m_AudioList = NULL;
	//init variable

	m_PlayMode = PLAYMODE_ALL;
	m_bMute = FALSE;
	m_nVolume = VOL_DEFAULT;

	m_bDisplayInfo = FALSE;
	m_nTimeHour = 0;
	m_nTimeMin = 0;
	m_nTimeSec = 0;

}


void CAudioPlayDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAudioPlayDlg)
	DDX_Control(pDX, IDC_STATIC_RAND, m_smodeRand);
	DDX_Control(pDX, IDC_STATIC_ONE, m_smodeOne);
	DDX_Control(pDX, IDC_STATIC_ALL, m_smodeAll);
	DDX_Control(pDX, IDC_SLIDER_VOL, m_sliderVol);
	DDX_Control(pDX, IDC_SLIDER_PRO, m_sliderPro);
	DDX_Control(pDX, IDC_STATIC_INFO, m_MusicInfo);
	DDX_Control(pDX, IDC_STATIC_TIME, m_Time);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAudioPlayDlg, CDialog)
	//{{AFX_MSG_MAP(CAudioPlayDlg)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_CLOSE, OnClose)
	ON_BN_CLICKED(IDC_PLAY, OnPlay)
	ON_BN_CLICKED(IDC_PAUSE, OnPause)
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_BN_CLICKED(IDC_MUTE, OnMute)
	ON_BN_CLICKED(IDC_VOL, OnVol)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_FORWARD, OnNextFile)
	ON_BN_CLICKED(IDC_BACKWARD, OnLastFile)
	ON_BN_CLICKED(IDC_OPEN, OnOpenFile)
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDC_MINIMIZE, OnMinimize)
	ON_WM_ERASEBKGND()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(IDC_SLIDER_VOL, OnSliderVol)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_BITMAPSLIDER_MOVED, OnBitmapSliderMoved)
	ON_MESSAGE(WM_BITMAPSLIDER_MOVING, OnBitmapSliderMoving)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAudioPlayDlg message handlers

BOOL CAudioPlayDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

// 	int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
// 	int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
	
	// TODO: Add extra initialization here
	//use to hide window
	::SetWindowText(this->GetSafeHwnd(),AUDIOCLASSNAME);
	//top window
	//::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST, AUDIO_LEFT, AUDIO_TOP, AUDIO_WIDTH, AUDIO_HEIGHT, SWP_SHOWWINDOW);
	SetWindowPos(NULL, AUDIO_LEFT, AUDIO_TOP, AUDIO_WIDTH, AUDIO_HEIGHT, SWP_SHOWWINDOW);
	
	//load some bitmap
#ifdef SCREEN_320X240
	m_BMPBG.LoadBitmap(IDB_BACKGROUND320);
#else
	m_BMPBG.LoadBitmap(IDB_BACKGROUND480);
#endif

	m_BMPModeAll.LoadBitmap(IDB_ALL);
	m_BMPModeOne.LoadBitmap(IDB_ONE);
	m_BMPModeRand.LoadBitmap(IDB_RAND);

	//update static ctrl
	m_Time.MoveWindow(&RectAudioTime);
	m_MusicInfo.MoveWindow(&RectAudioTitle);
	m_smodeAll.MoveWindow(&RectModeAll);
	m_smodeOne.MoveWindow(&RectModeOne);
	m_smodeRand.MoveWindow(&RectModeRand);
	//modify static ss_bitmap
	m_smodeAll.ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);
	m_smodeOne.ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);
	m_smodeRand.ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);

	LoadPlayMode();
	LoadAndLocateButtons();

	//add battery
	VERIFY(m_bat.Create(NULL, WS_VISIBLE|WS_CHILD|SS_BITMAP, CRect(390,11,415,21), this));
	RegisterBatteryWndToMainUI(m_bat.GetSafeHwnd());
	

	//slider program
	m_sliderPro.SetBitmapChannel( IDB_PROSLIDE_ACTIVE, IDB_PROSLIDER);
	m_sliderPro.DrawFocusRect( FALSE );
	m_nMin = 0;
	m_nMax = m_nProWidth;
	m_nPos = 0;
	
	m_sliderPro.SetRange( m_nMin, m_nMax );
	m_sliderPro.SetPos( m_nPos );
	
	//	m_sliderPro.SetMargin( 0, 2, 0, 0 );
	//slider volume
	
	m_sliderVol.SetBitmapChannel( IDB_VOL_OFF, IDB_VOL_ON, TRUE );
	m_sliderVol.SetRange( 0, m_nVolWidth);
	m_sliderVol.SetMarginLeft( 2 );
	m_sliderVol.SetMarginRight( 2 );
	//set volume position	
 	//double dd = (double)m_nVolume/VOL_SILENCE;
	//int i = dd*m_nVolWidth;
	m_sliderVol.SetPos((int)(((double)m_nVolume/VOL_SILENCE)*m_nVolWidth));

	//have audio play list and string list count > 0
	if(LoadPlayList()&&(g_StrList.GetCount()))
	{	
		//always get first string to play
		wcscpy(m_chFileName,g_StrList.GetAt(g_StrList.FindIndex(0)));
		AudioPlay();
	}

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
void CAudioPlayDlg::LoadAndLocateButtons()
{
	CRect btnRect;

	VERIFY(m_btnClose.AutoLoad(IDC_CLOSE, this));
	m_btnClose.GetClientRect(&btnRect);
	m_btnClose.MoveWindow(AudioBtnPos[AUDIO_CTRL_CLOSE].x, AudioBtnPos[AUDIO_CTRL_CLOSE].y, btnRect.Width(), btnRect.Height(), FALSE);

	VERIFY(m_btnMinimize.AutoLoad(IDC_MINIMIZE, this));
	m_btnMinimize.GetClientRect(&btnRect);
	m_btnMinimize.MoveWindow(AudioBtnPos[AUDIO_CTRL_MINIMIZE].x, AudioBtnPos[AUDIO_CTRL_MINIMIZE].y, btnRect.Width(), btnRect.Height(), FALSE);

	VERIFY(m_btnPlay.AutoLoad(IDC_PLAY, this));
	m_btnPlay.GetClientRect(&btnRect);
	m_btnPlay.MoveWindow(AudioBtnPos[AUDIO_CTRL_PLAY].x, AudioBtnPos[AUDIO_CTRL_PLAY].y, btnRect.Width(), btnRect.Height(), FALSE);
	
	VERIFY(m_btnPause.AutoLoad(IDC_PAUSE, this));
	m_btnPause.GetClientRect(&btnRect);
	m_btnPause.MoveWindow(AudioBtnPos[AUDIO_CTRL_PAUSE].x, AudioBtnPos[AUDIO_CTRL_PAUSE].y, btnRect.Width(), btnRect.Height(), FALSE);
	
	VERIFY(m_btnStop.AutoLoad(IDC_STOP, this));
	m_btnStop.GetClientRect(&btnRect);
	m_btnStop.MoveWindow(AudioBtnPos[AUDIO_CTRL_STOP].x, AudioBtnPos[AUDIO_CTRL_STOP].y, btnRect.Width(), btnRect.Height(), FALSE);
	
	VERIFY(m_btnBackward.AutoLoad(IDC_BACKWARD, this));
	m_btnBackward.GetClientRect(&btnRect);
	m_btnBackward.MoveWindow(AudioBtnPos[AUDIO_CTRL_BACKWARD].x, AudioBtnPos[AUDIO_CTRL_BACKWARD].y, btnRect.Width(), btnRect.Height(), FALSE);
	
	VERIFY(m_btnForward.AutoLoad(IDC_FORWARD, this));
	m_btnForward.GetClientRect(&btnRect);
	m_btnForward.MoveWindow(AudioBtnPos[AUDIO_CTRL_FORWARD].x, AudioBtnPos[AUDIO_CTRL_FORWARD].y, btnRect.Width(), btnRect.Height(), FALSE);
	
	VERIFY(m_btnOpen.AutoLoad(IDC_OPEN, this));
	m_btnOpen.GetClientRect(&btnRect);
	m_btnOpen.MoveWindow(AudioBtnPos[AUDIO_CTRL_OPEN].x, AudioBtnPos[AUDIO_CTRL_OPEN].y, btnRect.Width(), btnRect.Height(), FALSE);
	
// 	VERIFY(m_btnRand.AutoLoad(IDC_PLAYMODE_RAND, this));
// 	m_btnRand.GetClientRect(&btnRect);
// 	m_btnRand.MoveWindow(AudioBtnPos[AUDIO_CTRL_RAND].x, AudioBtnPos[AUDIO_CTRL_RAND].y, btnRect.Width(), btnRect.Height(), FALSE);
// 
// 	VERIFY(m_btnOne.AutoLoad(IDC_PLAYMODE_ONE, this));
// 	m_btnOne.GetClientRect(&btnRect);
// 	m_btnOne.MoveWindow(AudioBtnPos[AUDIO_CTRL_ONE].x, AudioBtnPos[AUDIO_CTRL_ONE].y, btnRect.Width(), btnRect.Height(), FALSE);
// 
// 	VERIFY(m_btnAll.AutoLoad(IDC_PLAYMODE_ALL, this));
// 	m_btnAll.GetClientRect(&btnRect);
// 	m_btnAll.MoveWindow(AudioBtnPos[AUDIO_CTRL_ALL].x, AudioBtnPos[AUDIO_CTRL_ALL].y, btnRect.Width(), btnRect.Height(), FALSE);
// 	

	VERIFY(m_btnVol.AutoLoad(IDC_VOL, this));
	m_btnVol.GetClientRect(&btnRect);
	m_btnVol.MoveWindow(AudioBtnPos[AUDIO_CTRL_VOLUME].x, AudioBtnPos[AUDIO_CTRL_VOLUME].y, btnRect.Width(), btnRect.Height(), FALSE);

	VERIFY(m_btnMute.AutoLoad(IDC_MUTE, this));
	m_btnMute.GetClientRect(&btnRect);
	m_btnMute.MoveWindow(AudioBtnPos[AUDIO_CTRL_VOLUME].x, AudioBtnPos[AUDIO_CTRL_VOLUME].y, btnRect.Width(), btnRect.Height(), FALSE);
	m_btnMute.ShowWindow(SW_HIDE);
	//program slide 
	m_sliderPro.GetClientRect(&btnRect);
	m_nProWidth = btnRect.Width();
	m_sliderPro.MoveWindow(AudioBtnPos[AUDIO_CTRL_PROSLIDER].x, AudioBtnPos[AUDIO_CTRL_PROSLIDER].y, btnRect.Width(), btnRect.Height(), FALSE);
	
	//volume slide 
	m_sliderVol.GetClientRect(&btnRect);
	m_nVolWidth = btnRect.Width();
	m_sliderVol.MoveWindow(AudioBtnPos[AUDIO_CTRL_VOLSLIDER].x, AudioBtnPos[AUDIO_CTRL_VOLSLIDER].y, btnRect.Width(), btnRect.Height(), FALSE);

}


void CAudioPlayDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	RECT rc;
	GetClientRect(&rc);
	
	CXTMemDC  Memdc(&dc,rc);
	
	Memdc.SetBkMode(TRANSPARENT);

	Memdc.SelectObject(&m_BMPBG);

	// Do not call CDialog::OnPaint() for painting messages
}

void CAudioPlayDlg::LoadPlayMode() 
{
	m_smodeAll.ShowWindow(SW_HIDE);
	m_smodeOne.ShowWindow(SW_HIDE);
	m_smodeRand.ShowWindow(SW_HIDE);

	switch(m_PlayMode)
	{
	case PLAYMODE_ALL:
		m_smodeAll.ShowWindow(SW_SHOW);
		m_smodeAll.SetBitmap((HBITMAP)m_BMPModeAll);
		break;
	case PLAYMODE_ONE:
		m_smodeOne.ShowWindow(SW_SHOW);
		m_smodeOne.SetBitmap((HBITMAP)m_BMPModeOne);
		break;
	case PLAYMODE_RAND:
		m_smodeRand.ShowWindow(SW_SHOW);
		m_smodeRand.SetBitmap((HBITMAP)m_BMPModeRand);
		break;
	}
}

BOOL CAudioPlayDlg::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	return CDialog::OnEraseBkgnd(pDC);
}

void CAudioPlayDlg::OnClose() 
{
	// TODO: Add your control notification handler code here
// 	TCHAR	chValue[10];

	//save some variable
// 	_itow(m_PlayMode, chValue, 10);
// 	SaveSystemDate(SYSINFO_PLAYMODE_ID,chValue);
// 	_itow(m_bMute, chValue, 10);
// 	SaveSystemDate(SYSINFO_MUTE_ID,chValue);

	//del battery
	UnregisterBatteryWndToMainUI(m_bat.GetSafeHwnd());
	m_bat.DestroyWindow();
	//del bmp
	m_BMPBG.DeleteObject();
	m_BMPModeAll.DeleteObject();
	m_BMPModeOne.DeleteObject();
	m_BMPModeRand.DeleteObject();

#ifdef TESTPLAYER
	if(m_Player.play_state != STATE_STOP)
		m_Player.stop();
	
	m_Player.release();
#endif
	CDialog::OnOK();
	
}

void CAudioPlayDlg::OnMinimize() 
{
	// TODO: Add your control notification handler code here
	this->ShowWindow(SW_HIDE);
}

void CAudioPlayDlg::AudioPlay()
{
	//kill timer
	KillTimer(TIME_AUDIO_SECID);
	KillTimer(TIME_AUDIO_INFO);
	//initialize player
#ifdef TESTPLAYER
	if((m_Player.play_state == STATE_PLAY) ||(m_Player.play_state == STATE_PAUSE))
		m_Player.stop();

	m_Player.release();
	
	m_Player.Initialize(m_hWnd, m_chFileName);
#endif
	
	//get audio duration
	GetAudioDuration();
	
	//init variable
	m_bDisplayInfo = FALSE;
	//only .mp3 file have info
	if(wcsstr(m_chFileName,L".mp3") || wcsstr(m_chFileName,L".MP3"))
	{
		m_bDisplayInfo = TRUE;
 		GetMp3Attr();
	}

	//for display audio info
	if(m_bDisplayInfo)
	{
		//only for .mp3, first display filename
		m_MusicInfo.SetWindowText(GetFileName(m_chFileName));
		//so next display title,artist,ablum...
		m_nDisplayIdx = 1;
		//use timer 3000ms
		SetTimer(TIME_AUDIO_INFO, AUDIO_INFO_SEC, NULL);
	}
	else
	{
		m_MusicInfo.SetWindowText(GetFileName(m_chFileName));
	}
	//set initialize volume
#ifdef TESTPLAYER
	m_Player.SetVolume(m_nVolume);
#endif

	//play music
	OnPlay();
}


void CAudioPlayDlg::OnPlay() 
{
	// TODO: Add your control notification handler code here
#ifdef TESTPLAYER
	if((m_chFileName[0])&&(m_Player.play_state != STATE_PLAY))
	{
		m_Player.play();

		//use timer 1000ms for display time
		if(m_Player.play_state == STATE_PLAY)
			SetTimer(TIME_AUDIO_SECID,AUDIO_PLAY_SEC,NULL);
	}
#endif
}

void CAudioPlayDlg::OnPause() 
{
	// TODO: Add your control notification handler code here
#ifdef TESTPLAYER
	if((m_chFileName[0])&&(m_Player.play_state == STATE_PLAY))
	{
		m_Player.pause();
	}
#endif
}

void CAudioPlayDlg::OnStop() 
{
	// TODO: Add your control notification handler code here
	if(m_chFileName[0])
	{
#ifdef TESTPLAYER
		m_Player.stop();
#endif
		KillTimer(TIME_AUDIO_SECID);
		KillTimer(TIME_AUDIO_INFO);

		ResetTimeAndSlider();
	}	
}

//mute -- volume m_bMute false
void CAudioPlayDlg::OnMute() 
{
	// TODO: Add your control notification handler code here
	m_bMute = FALSE;

#ifdef TESTPLAYER
	m_Player.SetVolume(m_nVolume);
#endif
	m_btnVol.ShowWindow(SW_SHOW);
	m_btnMute.ShowWindow(SW_HIDE);
}

//volume -- mute m_bMute true
void CAudioPlayDlg::OnVol() 
{
	// TODO: Add your control notification handler code here
	m_bMute = TRUE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -