// 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; }