448 lines
11 KiB
C++
Executable File
448 lines
11 KiB
C++
Executable File
// MusicPlayerDlg.cpp : 实现文件
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "MusicPlayer.h"
|
|
#include "MusicPlayerDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
// CMusicPlayerDlg 对话框
|
|
|
|
CMusicPlayerDlg::CMusicPlayerDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CMusicPlayerDlg::IDD, pParent)
|
|
{
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|
|
|
// 初始化背景画刷
|
|
CBitmap tmpBmp;
|
|
// 从资源中加载背景图片
|
|
tmpBmp.LoadBitmap(IDB_MUSIC_WND);
|
|
|
|
m_BgDC.CreateCompatibleDC(NULL);
|
|
m_BgDC.SelectObject(&tmpBmp);
|
|
|
|
tmpBmp.DeleteObject();
|
|
|
|
m_txtClipFont.CreateFont(42,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
|
|
|
|
m_txtTitleFont.CreateFont(14,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
|
|
|
|
m_txtTimeFont.CreateFont(10,0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
|
|
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
|
|
|
|
m_InitDC = false;
|
|
|
|
m_Volume = 0;
|
|
|
|
if(m_TcpPlayer.Init("0.01",1))
|
|
{
|
|
m_Volume = m_TcpPlayer.GetVolume();
|
|
m_Volume /= 10;
|
|
if (m_Volume < 2)
|
|
{
|
|
m_Volume = 2;
|
|
}
|
|
|
|
if (m_Volume > 9)
|
|
{
|
|
m_Volume = 9;
|
|
}
|
|
|
|
m_Volume -= 2;
|
|
|
|
char cFileName[] = "\\Storage Card\\1.mp3";
|
|
m_TcpPlayer.SetCurrentPlayFile(cFileName);
|
|
|
|
//m_CurrentFile = GetFileName(CString(cFileName));
|
|
|
|
m_TcpPlayer.SetPlayerNotify(this, (LONG)PlayerNotifyProc);
|
|
|
|
m_CurentDuration = TEXT("00:00");
|
|
m_CurrentTime = TEXT("");
|
|
m_CurrentFile = TEXT("");
|
|
}
|
|
}
|
|
|
|
CMusicPlayerDlg::~CMusicPlayerDlg()
|
|
{
|
|
m_txtTimeFont.DeleteObject();
|
|
m_txtTitleFont.DeleteObject();
|
|
m_txtClipFont.DeleteObject();
|
|
m_BgDC.DeleteDC();
|
|
}
|
|
|
|
void CMusicPlayerDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_BUTTON_CLOSE, m_butClose);
|
|
DDX_Control(pDX, IDC_BUTTON_PLAYPAUSE, m_butPlay);
|
|
DDX_Control(pDX, IDC_BUTTON_STOP, m_butStop);
|
|
DDX_Control(pDX, IDC_BUTTON_PRE, m_butPre);
|
|
DDX_Control(pDX, IDC_BUTTON_NEXT, m_butNext);
|
|
DDX_Control(pDX, IDC_BUTTON_VOLADD, m_butAdd);
|
|
DDX_Control(pDX, IDC_BUTTON_VOLDEC, m_butVolDec);
|
|
DDX_Control(pDX, IDC_BUTTON_SOUND, m_butSound);
|
|
DDX_Control(pDX, IDC_PROGRESS_MUSIC, m_prgFile);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CMusicPlayerDlg, CDialog)
|
|
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
|
|
ON_WM_SIZE()
|
|
#endif
|
|
//}}AFX_MSG_MAP
|
|
ON_WM_ERASEBKGND()
|
|
ON_WM_PAINT()
|
|
ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CMusicPlayerDlg::OnBnClickedButtonClose)
|
|
ON_BN_CLICKED(IDC_BUTTON_PLAYPAUSE, &CMusicPlayerDlg::OnBnClickedButtonPlaypause)
|
|
ON_BN_CLICKED(IDC_BUTTON_STOP, &CMusicPlayerDlg::OnBnClickedButtonStop)
|
|
ON_BN_CLICKED(IDC_BUTTON_PRE, &CMusicPlayerDlg::OnBnClickedButtonPre)
|
|
ON_BN_CLICKED(IDC_BUTTON_NEXT, &CMusicPlayerDlg::OnBnClickedButtonNext)
|
|
ON_BN_CLICKED(IDC_BUTTON_SOUND, &CMusicPlayerDlg::OnBnClickedButtonSound)
|
|
ON_BN_CLICKED(IDC_BUTTON_VOLDEC, &CMusicPlayerDlg::OnBnClickedButtonVoldec)
|
|
ON_BN_CLICKED(IDC_BUTTON_VOLADD, &CMusicPlayerDlg::OnBnClickedButtonVoladd)
|
|
ON_WM_LBUTTONDOWN()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CMusicPlayerDlg 消息处理程序
|
|
|
|
BOOL CMusicPlayerDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
|
|
// 执行此操作
|
|
SetIcon(m_hIcon, TRUE); // 设置大图标
|
|
SetIcon(m_hIcon, FALSE); // 设置小图标
|
|
|
|
#ifdef WIN32_PLATFORM_WFSP
|
|
if (!m_dlgCommandBar.Create(this) ||
|
|
!m_dlgCommandBar.InsertMenuBar(IDR_MAINFRAME))
|
|
{
|
|
TRACE0("未能创建 CommandBar\n");
|
|
return FALSE; // 未能创建
|
|
}
|
|
#endif // WIN32_PLATFORM_WFSP
|
|
// TODO: 在此添加额外的初始化代码
|
|
|
|
MoveWindow(0,10,320,240,TRUE);
|
|
//CenterWindow(GetDesktopWindow());
|
|
|
|
m_butClose.MoveWindow(200,205,35,35);
|
|
m_butClose.LoadBitmaps(IDB_MUSIC_CLOSE,IDB_MUSIC_CLOSED);
|
|
|
|
m_butPlay.MoveWindow(0,185,55,55);
|
|
m_butPlay.LoadBitmaps(IDB_MUSIC_PLAY,IDB_MUSIC_PAUSE);
|
|
|
|
m_butStop.MoveWindow(64,205,35,35);
|
|
m_butStop.LoadBitmaps(IDB_MUSIC_STOP,IDB_MUSIC_STOPD);
|
|
|
|
m_butPre.MoveWindow(110,205,35,35);
|
|
m_butPre.LoadBitmaps(IDB_MUSIC_PRE,IDB_MUSIC_PRED);
|
|
|
|
m_butNext.MoveWindow(155,205,35,35);
|
|
m_butNext.LoadBitmaps(IDB_MUSIC_NEXT,IDB_MUSIC_NEXTD);
|
|
|
|
m_butVolDec.MoveWindow(258,195,21,21);
|
|
m_butVolDec.LoadBitmaps(IDB_MUSIC_VOLDEC,IDB_MUSIC_VOLDECD);
|
|
|
|
m_butAdd.MoveWindow(293,195,21,21);
|
|
m_butAdd.LoadBitmaps(IDB_MUSIC_ADDVOL,IDB_MUSIC_ADDVOLD);
|
|
|
|
m_butSound.MoveWindow(258,167,20,20);
|
|
m_butSound.LoadBitmaps(IDB_MUSIC_SOUND,IDB_MUSIC_MUTE);
|
|
|
|
m_prgFile.MoveWindow(38,174,177,5);
|
|
m_prgFile.LoadBitmap(IDB_MUSIC_PRGEMPTY,IDB_MUSIC_PRGFULL);
|
|
m_prgFile.SetRange(0,100);
|
|
m_prgFile.SetPos(0);
|
|
|
|
m_Timer = timeSetEvent(1000,100,(LPTIMECALLBACK)PlayerTimeProc,(DWORD)this,TIME_PERIODIC);
|
|
|
|
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
|
|
}
|
|
|
|
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
|
|
void CMusicPlayerDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
|
|
{
|
|
DRA::RelayoutDialog(
|
|
AfxGetInstanceHandle(),
|
|
this->m_hWnd,
|
|
DRA::GetDisplayMode() != DRA::Portrait ?
|
|
MAKEINTRESOURCE(IDD_MUSICPLAYER_DIALOG_WIDE) :
|
|
MAKEINTRESOURCE(IDD_MUSICPLAYER_DIALOG));
|
|
}
|
|
#endif
|
|
|
|
|
|
BOOL CMusicPlayerDlg::OnEraseBkgnd(CDC* pDC)
|
|
{
|
|
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
if (!m_InitDC)
|
|
{
|
|
CBitmap tmpBmp;
|
|
tmpBmp.CreateCompatibleBitmap(pDC,320,240);
|
|
m_MemDC.CreateCompatibleDC(pDC);
|
|
m_MemDC.SelectObject(&tmpBmp);
|
|
m_MemDC.SelectObject(&m_txtClipFont);
|
|
m_MemDC.SetBkMode(TRANSPARENT);
|
|
m_MemDC.SetTextColor(RGB(255,255,255));
|
|
tmpBmp.DeleteObject();
|
|
m_InitDC = true;
|
|
}
|
|
return FALSE;
|
|
return CDialog::OnEraseBkgnd(pDC);
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
// TODO: 在此处添加消息处理程序代码
|
|
// 不为绘图消息调用 CDialog::OnPaint()
|
|
|
|
m_MemDC.BitBlt(0,0,320,240,&m_BgDC,0,0,SRCCOPY);
|
|
if (!m_CurrentFile.IsEmpty())
|
|
{
|
|
int time = m_TcpPlayer.GetPossion();
|
|
|
|
if (time < 0)
|
|
{
|
|
time = 0;
|
|
}
|
|
m_CurrentTime.Format(TEXT("%02d:%02d"),time / 60, time % 60);
|
|
m_prgFile.SetPos(time);
|
|
|
|
m_MemDC.SelectObject(m_txtClipFont);
|
|
m_MemDC.SetTextColor(RGB(144,151,143));
|
|
m_MemDC.DrawText(m_CurrentTime,CRect(100,48,224,95),DT_CENTER|DT_VCENTER);
|
|
|
|
m_MemDC.SelectObject(m_txtTitleFont);
|
|
m_MemDC.SetTextColor(RGB(255,255,255));
|
|
m_MemDC.DrawText(m_CurrentFile,CRect(0,107,320,120),DT_CENTER|DT_VCENTER);
|
|
|
|
m_MemDC.SelectObject(m_txtTimeFont);
|
|
m_MemDC.DrawText(m_CurentDuration,CRect(217,171,247,181),DT_CENTER|DT_VCENTER);
|
|
}
|
|
DrawVolume(&m_MemDC);
|
|
dc.BitBlt(0,0,320,240,&m_MemDC,0,0,SRCCOPY);
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonClose()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
EndDialog(0);
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonPlaypause()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
if (!m_TcpPlayer.HasPlayFile())
|
|
{
|
|
MessageBox(TEXT("没有指定播放文件"));
|
|
return;
|
|
}
|
|
if (!m_TcpPlayer.IsPlaying())
|
|
{
|
|
if(m_TcpPlayer.Play(true))
|
|
{
|
|
int time = m_TcpPlayer.GetDuration();
|
|
|
|
if (time < 0)
|
|
{
|
|
time = 0;
|
|
}
|
|
|
|
m_CurentDuration.Format(TEXT("%02d:%02d"),time / 60, time % 60);
|
|
|
|
m_prgFile.SetRange(0,time);
|
|
|
|
m_CurrentFile = GetFileName(m_TcpPlayer.GetPlayFileName());
|
|
|
|
Invalidate();
|
|
m_butPlay.LoadBitmaps(IDB_MUSIC_PAUSE,IDB_MUSIC_PLAY);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(m_TcpPlayer.Play(false))
|
|
m_butPlay.LoadBitmaps(IDB_MUSIC_PLAY,IDB_MUSIC_PAUSE);
|
|
}
|
|
|
|
m_butPlay.Invalidate();
|
|
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonStop()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
m_TcpPlayer.Stop();
|
|
m_butPlay.LoadBitmaps(IDB_MUSIC_PLAY,IDB_MUSIC_PAUSE);
|
|
m_butPlay.Invalidate();
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonPre()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
OnBnClickedButtonStop();
|
|
m_TcpPlayer.Prev();
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonNext()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
OnBnClickedButtonStop();
|
|
m_TcpPlayer.Next();
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonSound()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
if (m_TcpPlayer.GetMute())
|
|
{
|
|
m_butSound.LoadBitmaps(IDB_MUSIC_SOUND,IDB_MUSIC_MUTE);
|
|
m_TcpPlayer.SetMute(false);
|
|
}
|
|
else
|
|
{
|
|
m_butSound.LoadBitmaps(IDB_MUSIC_MUTE,IDB_MUSIC_SOUND);
|
|
m_TcpPlayer.SetMute(true);
|
|
}
|
|
|
|
m_butSound.Invalidate();
|
|
}
|
|
|
|
// 绘制音量
|
|
void CMusicPlayerDlg::DrawVolume(CDC* pDC)
|
|
{
|
|
int startX = 279;
|
|
int startY = 180;
|
|
|
|
int iVolume = m_TcpPlayer.GetVolume();
|
|
|
|
if (iVolume == -1)
|
|
{
|
|
iVolume = 0;
|
|
}
|
|
|
|
iVolume /= 10;
|
|
|
|
if (iVolume < 2 )
|
|
{
|
|
iVolume = 2;
|
|
}
|
|
|
|
if (iVolume > 9)
|
|
{
|
|
iVolume = 9;
|
|
}
|
|
|
|
m_Volume = iVolume - 2;
|
|
|
|
|
|
for (UINT i = 0; i <= m_Volume; i++)
|
|
{
|
|
RECT rc;
|
|
rc.left = startX + 5 * i;
|
|
rc.top = startY - i;
|
|
rc.right = rc.left + 3;
|
|
rc.bottom = startY + 6;
|
|
|
|
pDC->FillSolidRect(&rc,RGB(255,255,255));
|
|
}
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonVoldec()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
if (m_Volume > 0)
|
|
{
|
|
m_Volume--;
|
|
|
|
int iVolume = m_Volume + 2;
|
|
iVolume *= 10;
|
|
|
|
m_TcpPlayer.SetVolume(iVolume);
|
|
|
|
CRect rc(280,167,320,187);
|
|
InvalidateRect(&rc);
|
|
//Invalidate();
|
|
}
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnBnClickedButtonVoladd()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
if (m_Volume < 7)
|
|
{
|
|
m_Volume++;
|
|
|
|
int iVolume = m_Volume + 2;
|
|
iVolume *= 10;
|
|
|
|
m_TcpPlayer.SetVolume(iVolume);
|
|
|
|
CRect rc(280,167,320,187);
|
|
InvalidateRect(&rc);
|
|
}
|
|
}
|
|
|
|
CString CMusicPlayerDlg::GetFileName(CString sPathName)
|
|
{
|
|
CString FileExt;
|
|
FileExt.Empty();
|
|
// 文件名长度
|
|
int strLen = sPathName.GetLength() - 1;
|
|
|
|
for(int i = strLen; i >= 0; i--)
|
|
{
|
|
// 查找文件名中最好一个'.'
|
|
if(sPathName.GetAt(i) == '\\')
|
|
{
|
|
// 提取文件扩展名
|
|
FileExt = sPathName.Right(strLen - i);
|
|
break;
|
|
}
|
|
}
|
|
return FileExt;
|
|
}
|
|
|
|
void PlayerTimeProc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD dw2)
|
|
{
|
|
CMusicPlayerDlg *pDlg = (CMusicPlayerDlg*)dwUser;
|
|
pDlg->InvalidateRect(CRect(100,48,224,95));
|
|
}
|
|
|
|
void CMusicPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
|
if (point.x >= 38 && point.y >= 169 && point.x <= 213 && point.y <= 183)
|
|
{
|
|
int iPos = ((point.x - 38) * (m_prgFile.m_Max - m_prgFile.m_Min)) / (213 - 38);
|
|
|
|
m_prgFile.SetPos(iPos);
|
|
m_TcpPlayer.SetPossion(iPos);
|
|
}
|
|
|
|
CDialog::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
int PlayerNotifyProc(LPVOID pWnd, int Id, int Value)
|
|
{
|
|
CMusicPlayerDlg *pMusic = (CMusicPlayerDlg*)pWnd;
|
|
|
|
CString str;
|
|
str.Format(TEXT("ID:%x,Value:%d\r\n"),Id,Value);
|
|
OutputDebugString(str);
|
|
|
|
if (Id == PLAYER_EXIT_AT_END)
|
|
{
|
|
pMusic->OnBnClickedButtonStop();
|
|
}
|
|
|
|
return 0;
|
|
} |