📄 audioplaydlg.cpp
字号:
// 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 + -