// MediaPlayerDlg.cpp : 实现文件 // #include "stdafx.h" #include "MediaPlayer.h" #include "MediaPlayerDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMediaPlayerDlg 对话框 CMediaPlayerDlg::CMediaPlayerDlg(CWnd* pParent /*=NULL*/) : CDialog(CMediaPlayerDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 初始化背景画刷 CBitmap tmpBmp; // 从资源中加载背景图片 tmpBmp.LoadBitmap(IDB_MEDIA_WND); m_BgDC.CreateCompatibleDC(NULL); m_BgDC.SelectObject(&tmpBmp); tmpBmp.DeleteObject(); 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_blackBrush.CreateSolidBrush(RGB(0,0,0)); m_InitDC = false; m_Volume = 0; m_RefreshWnd = false; if(m_TcpPlayer.Init("0.01",1,TRUE)) { 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; m_CurrentTime = TEXT("00:00:00"); m_CurrentFile = TEXT(""); m_CurentDuration = TEXT("/00:00:00"); m_TcpPlayer.SetNotifyCallBack((LPVOID)this,(LONG)PlayerNotifyProc); } } CMediaPlayerDlg::~CMediaPlayerDlg() { m_txtTimeFont.DeleteObject(); m_blackBrush.DeleteObject(); m_BgDC.DeleteDC(); } void CMediaPlayerDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_BUTTON_CLOSE, m_butClose); DDX_Control(pDX, IDC_BUTTON_PLAY, 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_ADDVOL, m_butAdd); DDX_Control(pDX, IDC_BUTTON_DECVOL, m_butVolDec); DDX_Control(pDX, IDC_BUTTON_VOLUME, m_butSound); DDX_Control(pDX, IDC_BUTTON_FULL, m_butFull); DDX_Control(pDX, IDC_PROGRESS_PRG, m_prgVol); } BEGIN_MESSAGE_MAP(CMediaPlayerDlg, CDialog) #if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP) ON_WM_SIZE() #endif //}}AFX_MSG_MAP ON_WM_PAINT() ON_WM_ERASEBKGND() ON_BN_CLICKED(IDC_BUTTON_PLAY, &CMediaPlayerDlg::OnBnClickedButtonPlay) ON_BN_CLICKED(IDC_BUTTON_STOP, &CMediaPlayerDlg::OnBnClickedButtonStop) ON_BN_CLICKED(IDC_BUTTON_PRE, &CMediaPlayerDlg::OnBnClickedButtonPre) ON_BN_CLICKED(IDC_BUTTON_NEXT, &CMediaPlayerDlg::OnBnClickedButtonNext) ON_BN_CLICKED(IDC_BUTTON_FULL, &CMediaPlayerDlg::OnBnClickedButtonFull) ON_BN_CLICKED(IDC_BUTTON_VOLUME, &CMediaPlayerDlg::OnBnClickedButtonVolume) ON_BN_CLICKED(IDC_BUTTON_ADDVOL, &CMediaPlayerDlg::OnBnClickedButtonAddvol) ON_BN_CLICKED(IDC_BUTTON_DECVOL, &CMediaPlayerDlg::OnBnClickedButtonDecvol) ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CMediaPlayerDlg::OnBnClickedButtonClose) ON_WM_LBUTTONDOWN() // ON_STN_CLICKED(IDC_STATIC_VIDEO, &CMediaPlayerDlg::OnStnClickedStaticVideo) // ON_WM_CTLCOLOR() END_MESSAGE_MAP() // CMediaPlayerDlg 消息处理程序 BOOL CMediaPlayerDlg::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,0,320,240); CenterWindow(GetDesktopWindow()); m_butClose.MoveWindow(245,205,35,35); m_butClose.LoadBitmaps(IDB_MEDIA_CLOSE,IDB_MEDIA_CLOSED); m_butFull.MoveWindow(200,205,35,35); m_butFull.LoadBitmaps(IDB_MEDIA_FULL,IDB_MEDIA_FULLD); m_butPlay.MoveWindow(0,185,55,55); m_butPlay.LoadBitmaps(IDB_MEDIA_PLAY,IDB_MEDIA_PAUSE); m_butStop.MoveWindow(64,205,35,35); m_butStop.LoadBitmaps(IDB_MEDIA_STOP,IDB_MEDIA_STOPD); m_butPre.MoveWindow(110,205,35,35); m_butPre.LoadBitmaps(IDB_MEDIA_PRE,IDB_MEDIA_PRED); m_butNext.MoveWindow(155,205,35,35); m_butNext.LoadBitmaps(IDB_MEDIA_NEXT,IDB_MEDIA_NEXTD); m_butVolDec.MoveWindow(303,188,16,17); m_butVolDec.LoadBitmaps(IDB_MEDIA_VOLDEC,IDB_MEDIA_VOLDECD); m_butAdd.MoveWindow(303,168,16,17); m_butAdd.LoadBitmaps(IDB_MEDIA_ADDVOL,IDB_MEDIA_ADDVOLD); m_butSound.MoveWindow(241,167,20,20); m_butSound.LoadBitmaps(IDB_MEDIA_SOUND,IDB_MEDIA_MUTE); POINT pt; pt.x = 1; pt.y = 1; ClientToScreen(&pt); rect rcDst; rcDst.x = pt.x; rcDst.y = pt.y; rcDst.Width = 318; rcDst.Height = 163; m_TcpPlayer.SetDisplayRect(&rcDst); m_prgVol.MoveWindow(9,174,177,5); m_prgVol.LoadBitmap(IDB_MEDIA_PRGEMPTY,IDB_MEDIA_PRGFULL); m_prgVol.SetRange(0,100); m_prgVol.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 CMediaPlayerDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/) { DRA::RelayoutDialog( AfxGetInstanceHandle(), this->m_hWnd, DRA::GetDisplayMode() != DRA::Portrait ? MAKEINTRESOURCE(IDD_MEDIAPLAYER_DIALOG_WIDE) : MAKEINTRESOURCE(IDD_MEDIAPLAYER_DIALOG)); } #endif void PlayerNotifyProc(LPVOID pForm, int Id, int Value) { CMediaPlayerDlg* pMedia = (CMediaPlayerDlg*)pForm; CString str; str.Format(TEXT("ID:0x%2x,Value:%d\r\n"),Id,Value); OutputDebugString(str); BOOL IsPlayEnd = FALSE; if (Id == PLAYER_EXIT_AT_END) { //Player->Set(Player,PLAYER_STOP,NULL,0); pMedia->OnBnClickedButtonStop(); //OutputDebugString(TEXT("Play At the end.\n")); } else if (Id == PLAYER_TITLE && Value == 1) { pMedia->m_CurrentFile = pMedia->GetFileName(pMedia->m_TcpPlayer.GetListFileName(pMedia->m_TcpPlayer.GetCurFileIndex())); IsPlayEnd = TRUE; pMedia->Invalidate(); OutputDebugString(TEXT("Change Title\n")); } else if(Id == PLAYER_PLAY && Value == 1) { //OutputDebugString(TEXT("Change Duration\n")); } else if(Id == PLAYER_PERCENT && Value == 1) { int iTime = pMedia->m_TcpPlayer.GetDuration(); if (iTime < 0) { iTime = 0; } else { pMedia->m_prgVol.SetRange(0, iTime); } pMedia->m_CurentDuration.Format(TEXT("/%02d:%02d:%02d"),iTime / 3600, iTime / 60, iTime % 60); IsPlayEnd = FALSE; pMedia->Invalidate(); } } void CMediaPlayerDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CDialog::OnPaint() if (!m_TcpPlayer.IsFullScreen()) { m_MemDC.BitBlt(0,0,320,240,&m_BgDC,0,0,SRCCOPY); tick_t time = m_TcpPlayer.GetPossion(); if (time < 0) { time = 0; } m_CurrentTime.Format(TEXT("%02d:%02d:%02d%s"),time / 3600, time / 60, time % 60, m_CurentDuration); m_prgVol.SetPos(time); m_MemDC.DrawText(m_CurrentTime,CRect(80,186,188,200),DT_RIGHT|DT_VCENTER); DrawVolume(&m_MemDC); if (m_TcpPlayer.IsPlaying() && !m_RefreshWnd) { dc.BitBlt(0,167,320 - 167,240,&m_MemDC,0,167,SRCCOPY); } else { if (m_RefreshWnd) { m_RefreshWnd = false; } dc.BitBlt(0,0,320,240,&m_MemDC,0,0,SRCCOPY); } } } BOOL CMediaPlayerDlg::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_txtTimeFont); m_MemDC.SetBkMode(TRANSPARENT); m_MemDC.SetTextColor(RGB(255,255,255)); tmpBmp.DeleteObject(); m_InitDC = true; } return FALSE; //return CDialog::OnEraseBkgnd(pDC); } // 绘制音量 void CMediaPlayerDlg::DrawVolume(CDC* pDC) { int startX = 262; int startY = 179; 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 CMediaPlayerDlg::OnBnClickedButtonPlay() { // TODO: 在此添加控件通知处理程序代码 if (!m_TcpPlayer.HasPlayFile()) { // MessageBox(TEXT("没有指定播放文件")); // return; tchar_t* pFileName = (tchar_t*)((unsigned short*)TEXT("\\Storage Card\\mp4")); tchar_t* pExtName = (tchar_t*)((unsigned short*)TEXT("*.*")); //int i = m_TcpPlayer.AddFileFromDir(pFileName, pExtName, false, 0); int i = m_TcpPlayer.SetCurrentPlayFile("\\Storage Card\\10.wmv"); if (i == -1) { MessageBox(TEXT("没有指定播放文件")); return; } } if (!m_TcpPlayer.IsPlaying()) { if(m_TcpPlayer.Play(true)) { m_butPlay.LoadBitmaps(IDB_MEDIA_PAUSE,IDB_MEDIA_PLAY); m_CurrentFile = GetFileName(m_TcpPlayer.GetListFileName(m_TcpPlayer.GetCurFileIndex())); int iTime = m_TcpPlayer.GetDuration(); if (iTime < 0) { iTime = 0; } else { m_prgVol.SetRange(0, iTime); } m_CurentDuration.Format(TEXT("%02d:%02d"),iTime / 60, iTime % 60); Invalidate(); } } else { if(m_TcpPlayer.Play(false)) m_butPlay.LoadBitmaps(IDB_MEDIA_PLAY,IDB_MEDIA_PAUSE); } m_butPlay.Invalidate(); } void CMediaPlayerDlg::OnBnClickedButtonStop() { // TODO: 在此添加控件通知处理程序代码 m_TcpPlayer.Stop(); m_butPlay.LoadBitmaps(IDB_MEDIA_PLAY,IDB_MEDIA_PAUSE); m_CurrentTime = TEXT("00:00:00"); m_CurentDuration = TEXT("00:00:00"); m_butPlay.Invalidate(); } void CMediaPlayerDlg::OnBnClickedButtonPre() { // TODO: 在此添加控件通知处理程序代码 m_TcpPlayer.Prev(); } void CMediaPlayerDlg::OnBnClickedButtonNext() { // TODO: 在此添加控件通知处理程序代码 m_TcpPlayer.Next(); } void CMediaPlayerDlg::OnBnClickedButtonFull() { // TODO: 在此添加控件通知处理程序代码 m_TcpPlayer.SetFullScreen(true); } void CMediaPlayerDlg::OnBnClickedButtonVolume() { // TODO: 在此添加控件通知处理程序代码 if (m_TcpPlayer.GetMute()) { m_butSound.LoadBitmaps(IDB_MEDIA_SOUND,IDB_MEDIA_MUTE); m_TcpPlayer.SetMute(false); } else { m_butSound.LoadBitmaps(IDB_MEDIA_MUTE,IDB_MEDIA_SOUND); m_TcpPlayer.SetMute(true); } m_butSound.Invalidate(); } void CMediaPlayerDlg::OnBnClickedButtonAddvol() { // TODO: 在此添加控件通知处理程序代码 if (m_Volume < 7) { m_Volume++; int iVolume = m_Volume + 2; iVolume *= 10; m_TcpPlayer.SetVolume(iVolume); CRect rc(260,167,300,187); InvalidateRect(&rc); } } void CMediaPlayerDlg::OnBnClickedButtonDecvol() { // TODO: 在此添加控件通知处理程序代码 if (m_Volume > 0) { m_Volume--; int iVolume = m_Volume + 2; iVolume *= 10; m_TcpPlayer.SetVolume(iVolume); CRect rc(260,167,300,187); InvalidateRect(&rc); //Invalidate(); } } void CMediaPlayerDlg::OnBnClickedButtonClose() { // TODO: 在此添加控件通知处理程序代码 EndDialog(0); } void PlayerTimeProc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD dw2) { CMediaPlayerDlg *pDlg = (CMediaPlayerDlg*)dwUser; if (pDlg->m_TcpPlayer.IsFullScreen()) { } else { pDlg->InvalidateRect(CRect(80,186,188,200)); } } CString CMediaPlayerDlg::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 CMediaPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (m_TcpPlayer.IsFullScreen()) { m_TcpPlayer.SetFullScreen(false); CDC* pDC = GetDC(); pDC->BitBlt(0,0,320,240,&m_MemDC,0,0,SRCCOPY); RefreshControl(); } else { if (point.x >= 9 && point.y >= 165 && point.y < 185 && point.x <= 184) { int iPos = ((point.x - 9) * (m_prgVol.m_Max - m_prgVol.m_Min)) / (184 - 9); m_prgVol.SetPos(iPos); m_TcpPlayer.SetPossion(iPos); } } CDialog::OnLButtonDown(nFlags, point); } void CMediaPlayerDlg::RefreshControl(void) { m_butClose.Invalidate(); m_butFull.Invalidate(); m_butPlay.Invalidate(); m_butStop.Invalidate(); m_butPre.Invalidate(); m_butNext.Invalidate(); m_butVolDec.Invalidate(); m_butAdd.Invalidate(); m_butSound.Invalidate(); m_prgVol.Invalidate(); m_RefreshWnd = true; Invalidate(); }