// PlayBarDlg.cpp : implementation file // #include "stdafx.h" #include "MovePlayer.h" #include "PlayBarDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPlayBarDlg dialog CPlayBarDlg::CPlayBarDlg(CWnd* pParent /*=NULL*/) : CDialog(CPlayBarDlg::IDD, pParent) { //{{AFX_DATA_INIT(CPlayBarDlg) //}}AFX_DATA_INIT m_pGraph = NULL; } void CPlayBarDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPlayBarDlg) DDX_Control(pDX, IDC_SLIDER3, m_cBalance); DDX_Control(pDX, IDC_SLIDER2, m_cVolume); DDX_Control(pDX, IDC_SLIDER1, m_cProgress); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPlayBarDlg, CDialog) //{{AFX_MSG_MAP(CPlayBarDlg) ON_WM_SIZE() ON_WM_ACTIVATE() ON_WM_PAINT() ON_WM_ACTIVATEAPP() ON_WM_LBUTTONDOWN() ON_WM_HSCROLL() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPlayBarDlg message handlers int CPlayBarDlg::GetHeight() { return m_height; } BOOL CPlayBarDlg::OnInitDialog() { CDialog::OnInitDialog(); if(!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_ToolBar.LoadToolBar(IDR_TOOLBAR)) { EndDialog(IDCANCEL); } RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); CRect rc; GetClientRect(&rc); m_ToolBar.MoveWindow(0, 20, rc.right, 25); //m_ToolBar.SetButtonStyle(TB_PLAY, TBBS_CHECKBOX); //m_ToolBar.SetButtonStyle(TB_PAUSE, TBBS_CHECKBOX); //m_ToolBar.SetButtonStyle(TB_STOP, TBBS_CHECKBOX); //for(int i=0; i<10; i++) // m_ToolBar.SetButtonStyle(i, TBBS_DISABLED); m_ToolBar.SetButtonStyle(0, TBBS_DISABLED); m_ToolBar.SetButtonStyle(1, TBBS_DISABLED); m_ToolBar.SetButtonStyle(2, TBBS_DISABLED); m_ToolBar.SetButtonStyle(4, TBBS_DISABLED); m_ToolBar.SetButtonStyle(5, TBBS_DISABLED); m_ToolBar.SetButtonStyle(6, TBBS_DISABLED); m_ToolBar.SetButtonStyle(7, TBBS_DISABLED); m_ToolBar.SetButtonStyle(9, TBBS_DISABLED); m_cProgress.MoveWindow(0, 0, rc.right, 20); m_cProgress.SetRange(0, 10000); m_cBalance.SetRange(-10000, 10000); m_cVolume.SetRange(-4000, 0); // TODO: Add extra initialization here GetSize(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPlayBarDlg::GetSize() { CRect rect; GetClientRect(&rect); m_width = rect.Width(); m_height = rect.Height(); } void CPlayBarDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: Add your message handler code here if(!m_ToolBar) return; CRect rc; GetClientRect(&rc); m_ToolBar.MoveWindow(0, 20, rc.right, 25); m_cProgress.MoveWindow(0, 0, rc.right, 20); m_cBalance.MoveWindow(rc.right-150, 20, 75, 20); m_cVolume.MoveWindow(rc.right-80, 20, 75, 20); } void CPlayBarDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CDialog::OnActivate(nState, pWndOther, bMinimized); // TODO: Add your message handler code here } void CPlayBarDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here DrawStatus(); // Do not call CDialog::OnPaint() for painting messages } void CPlayBarDlg::OnActivateApp(BOOL bActive, HTASK hTask) { CDialog::OnActivateApp(bActive, hTask); // TODO: Add your message handler code here } int CPlayBarDlg::DrawStatus() { CRect rc; GetClientRect(&rc); CDC memDC; CClientDC ClientDlgDC(FromHandle(m_hWnd)); CBrush brush; brush.CreateSolidBrush(RGB(0,0,0)); rc.top = 43; rc.right+=10; ClientDlgDC.FillRect(&rc,&brush); ClientDlgDC.SetBkColor(RGB(0,0,0)); ClientDlgDC.SetTextColor(RGB(255,255,255)); CFont font; font.CreatePointFont(90,"宋体"); CFont *pOldfont = ClientDlgDC.SelectObject(&font); if(m_pGraph) { if(m_pGraph->IsRunning()) TextOut(ClientDlgDC, 6, 47, "正在播放",8); else if(m_pGraph->IsPaused()) TextOut(ClientDlgDC, 6, 47, "已暂停",6); else if(m_pGraph->IsStopped()) TextOut(ClientDlgDC, 6, 47, "已停止",6); } else TextOut(ClientDlgDC, 6, 47, "",0); CString strTime(""); if(m_pGraph) { int h1,s1,m1; int h2,s2,m2; h1 = int(m_pGraph->GetPosition()/10000000) / 3600; s1 = int(m_pGraph->GetPosition()/10000000) / 60 % 60; m1 = int(m_pGraph->GetPosition()/10000000) % 60; h2 = int(m_pGraph->GetLength()/10000000) / 3600; s2 = int(m_pGraph->GetLength()/10000000) / 60 % 60; m2 = int(m_pGraph->GetLength()/10000000) % 60; strTime.Format("%.2d:%.2d:%.2d / %.2d:%.2d:%.2d",h1,s1,m1,h2,s2,m2); TextOut(ClientDlgDC, rc.right -130, 47, strTime,strTime.GetLength()); } else { TextOut(ClientDlgDC, rc.right -100, 47, strTime,strTime.GetLength()); } ClientDlgDC.SelectObject(pOldfont); return 1; } void CPlayBarDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default ::PostMessage(GetParent()->m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); CDialog::OnLButtonDown(nFlags, point); } BOOL CPlayBarDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->hwnd == m_ToolBar.m_hWnd && pMsg->message == WM_LBUTTONDOWN) ::PostMessage(GetParent()->m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(GET_X_LPARAM(pMsg->lParam), GET_Y_LPARAM(pMsg->lParam))); return CDialog::PreTranslateMessage(pMsg); } int CPlayBarDlg::BindGraph(CMyDWGraph *pGraph) { m_pGraph = pGraph; return 1; } int CPlayBarDlg::EnableSlider(BOOL bEnabled) { m_cProgress.EnableWindow(bEnabled); m_cBalance.EnableWindow(bEnabled); m_cVolume.EnableWindow(bEnabled); return 1; } int CPlayBarDlg::GetVolumeValue() { return m_cVolume.GetPos(); } int CPlayBarDlg::GetBalanceValue() { return m_cBalance.GetPos(); } int CPlayBarDlg::SetButton(int nIndex, UINT nStyle) { m_ToolBar.SetButtonStyle(nIndex, nStyle); return 1; } int CPlayBarDlg::SetSliderPos(int nPos) { m_cProgress.SetPos(nPos); return 1; } void CPlayBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default if (pScrollBar->GetSafeHwnd() == m_cProgress.GetSafeHwnd()) { if (m_pGraph) { __int64 len = m_pGraph->GetLength(); double pos = len * m_cProgress.GetPos() / 10000.; __int64 position = __int64(pos); m_pGraph->SetPosition(position); GetParent()->SetFocus(); } } else if(pScrollBar->GetSafeHwnd() == m_cBalance.GetSafeHwnd()) { if (m_pGraph) m_pGraph->SetAudioBalance(m_cBalance.GetPos()); GetParent()->SetFocus(); } else if(pScrollBar->GetSafeHwnd() == m_cVolume.GetSafeHwnd()) { if (m_pGraph) m_pGraph->SetAudioVolume(m_cVolume.GetPos()); GetParent()->SetFocus(); } else CDialog::OnHScroll(nSBCode, nPos, pScrollBar); CDialog::OnHScroll(nSBCode, nPos, pScrollBar); }