⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpleplayerdlg.cpp

📁 一个在WinCE下的媒体播放器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// SimplePlayerDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SimplePlayer.h"
#include "SimplePlayerDlg.h"
#include "VolumnAdjust.h"
//#include "MacSliderCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//#include "MySliderCtrl.h"
#include "FileViewer_Lib_Demo.cpp"
#pragma comment(lib, "strmbase.lib") 
#pragma comment(lib, "quartz.lib")
#pragma comment(lib, "strmiids.lib") 
#pragma comment(lib, "FileViewer.lib") 
  
/////////////////////////////////////////////////////////////////////////////
// CSimplePlayerDlg dialog

int nowshow=0;
int first_in_volume=0;
bool pauseflag=false;
CSimplePlayerDlg::CSimplePlayerDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSimplePlayerDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSimplePlayerDlg)
	m_ptext = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_FilterGraph = NULL;
	m_SliderTimer = NULL;

	waveOutGetVolume(0,&AudiuAmpFactor);
	x = (int)(AudiuAmpFactor >> 12) & 0x000f;
	nowshow=x;

	ButtonClose.LoadBitmaps(IDB_CLOSE1,IDB_CLOSE0);
	ButtonOpen.LoadBitmaps(IDB_OPEN1,IDB_OPEN0);
	ButtonStop.LoadBitmaps(IDB_STOP1,IDB_STOP0);
	ButtonFull.LoadBitmaps(IDB_FULL1,IDB_FULL0);
    ButtonPlayPause.LoadBitmaps(IDB_PLAY1,IDB_PLAY0);
	ButtonPreview.LoadBitmaps(IDB_PREVIEW1,IDB_PREVIEW0);
	ButtonNext.LoadBitmaps(IDB_NEXT1,IDB_NEXT0);


	m_flag=TRUE;
	m_flag1=TRUE;

	rflag=0;
	card=0;

	m_Font.CreateFont(15,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,DEFAULT_CHARSET,
	OUT_DEFAULT_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
	DEFAULT_PITCH|FF_SWISS,_T("Verdana"));

	m_hBmBkgnd  = NULL;
	m_hBrCtl[0] = NULL;
	m_hBrCtl[1] = NULL;
	m_hBrCtl[2] = NULL;
	m_hBrCtl[3] = NULL;
	m_hBrCtl[4] = NULL;

}

void CSimplePlayerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSimplePlayerDlg)
	DDX_Control(pDX, IDC_BK, m_BackGround);
	DDX_Control(pDX, IDC_STATIC_POSITION, m_StrPosition);
	DDX_Control(pDX, IDC_STATIC_DURATION, m_StrDuration);
	DDX_Control(pDX, IDC_SLIDER_GRAPH, m_SliderGraph);
	DDX_Control(pDX, IDC_SLIDER_VOLUME, m_SliderVolume);
	DDX_Control(pDX, IDC_TEXT, m_text);
	DDX_Control(pDX, IDC_VIDEO_WINDOW, m_VideoWindow);
	DDX_Text(pDX, IDC_TEXT, m_ptext);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSimplePlayerDlg, CDialog)
	//{{AFX_MSG_MAP(CSimplePlayerDlg)
	ON_BN_CLICKED(ID_BUTTON_OPEN, OnButtonOpen)
	ON_BN_CLICKED(ID_BUTTON_PLAY, OnButtonPlay)
	ON_WM_TIMER()
	ON_WM_ERASEBKGND()
	ON_WM_HSCROLL()
	ON_BN_CLICKED(ID_BUTTON_STOP, OnButtonStop)
	ON_BN_CLICKED(IDC_VIDEO_WINDOW, OnVideoWindow)
	ON_BN_CLICKED(ID_BUTTON_PREVIEW, OnButtonPreview)
	ON_BN_CLICKED(ID_BUTTON_NEXT, OnButtonNext)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_ENDPRO, OnEndpro)
	ON_MESSAGE( WM_CTLCOLORSTATIC, OnCtlColorStatic )
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSimplePlayerDlg message handlers


BOOL CSimplePlayerDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here

	m_VideoWindow.ModifyStyle(0, WS_CLIPCHILDREN);

	GetDlgItem(IDC_VIDEO_WINDOW)->EnableWindow(FALSE);
	GetDlgItem(IDC_VIDEO_WINDOW)->ShowWindow(SW_HIDE);
 
	m_SliderGraph.SetRange(0, 1000);
	m_SliderGraph.SetPos(0);
	m_SliderGraph.SetThumbColor(RGB(85, 145, 225));
	m_SliderGraph.SetChannelColor(RGB(185, 207, 236));
	m_SliderGraph.SetSelectionColor(RGB(85, 145, 225));


	m_SliderVolume.SetRange(0,15);
	m_SliderVolume.SetPos(0);

	m_SliderVolume.SetPos(nowshow);
	
	m_SliderVolume.SetThumbColor(RGB(85, 145, 225));
	m_SliderVolume.SetChannelColor(RGB(185,207,236));
	m_SliderVolume.SetSelection(0, m_SliderVolume.GetPos());
	m_SliderVolume.SetSelectionColor(RGB(85, 145, 225));

	VERIFY(ButtonClose.SubclassDlgItem(IDC_ENDPRO,this));
	ButtonClose.SizeToContent();
	VERIFY(ButtonOpen.SubclassDlgItem(ID_BUTTON_OPEN,this));
	ButtonOpen.SizeToContent();
	VERIFY(ButtonStop.SubclassDlgItem(ID_BUTTON_STOP,this));
	ButtonStop.SizeToContent();
	VERIFY(ButtonFull.SubclassDlgItem(ID_BUTTON_FULLSCREEN,this));
	ButtonFull.SizeToContent();
	VERIFY(ButtonPlayPause.SubclassDlgItem(ID_BUTTON_PLAY,this));
	ButtonPlayPause.SizeToContent();
	VERIFY(ButtonPreview.SubclassDlgItem(ID_BUTTON_PREVIEW,this));
	ButtonPreview.SizeToContent();
	VERIFY(ButtonNext.SubclassDlgItem(ID_BUTTON_NEXT,this));
	ButtonNext.SizeToContent();

   
	unsigned short aRootPath[] = {'\\', 'S', 'D', 'M', 'M', 'C', 0x00};
    if (GetFileAttributes(aRootPath) != 0xFFFFFFFF)
	{
		value=1;
	}
    else
	{
         value=0;
	}	

	CWnd *pWnd = GetDlgItem(IDC_TEXT);   
	pWnd->SetFont(&m_Font);  

	m_hBmBkgnd = ::LoadBitmap( AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BACKGROUND) );
	if( m_hBmBkgnd )
	{
		m_hBrCtl[0] = GetBkBrush( GetSafeHwnd(), IDC_TEXT, m_hBmBkgnd );
		m_hBrCtl[1] = GetBkBrush( GetSafeHwnd(), IDC_STATIC_POSITION, m_hBmBkgnd );
		m_hBrCtl[2] = GetBkBrush( GetSafeHwnd(), IDC_STATIC_DURATION, m_hBmBkgnd );
        m_hBrCtl[3] = GetBkBrush( GetSafeHwnd(), IDC_SLIDER_GRAPH, m_hBmBkgnd );
		m_hBrCtl[4] = GetBkBrush( GetSafeHwnd(), IDC_SLIDER_VOLUME, m_hBmBkgnd );
    }
	cBmp.LoadBitmap(IDB_BACKGROUND);
	m_BackGround.SetBitmap((HBITMAP)cBmp);
//    m_BackGround.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),
//		MAKEINTRESOURCE(IDB_BACKGROUND)));


    	hdll= LoadLibrary(_T("IO.dll"));

        if(hdll!=NULL)
		{
		   SaveVolume = (TVolume)GetProcAddress(hdll,(unsigned short *)L"SaveVolume");
		}
		
	return TRUE;  // return TRUE  unless you set the focus to a control
}

#define _X(x)	(x.left)
#define _Y(x)	(x.top)
#define _W(x)	(x.right - x.left)
#define _H(x)	(x.bottom - x.top)

//**************************************************************************************
//
//	GetBkBrush( HWND hWnd, UINT nID, HBITMAP hBmBk )
//  
//	Creates Background brush for the control specified by nID
//	according to its position in the parent dialog window.
//
//	hWnd [in]: Handle to the parent window
//  nID [in]: Control ID
//  hBmBk [in]: Bitmap handle of the parent dialog's background image
//
//
//**************************************************************************************
HBRUSH CSimplePlayerDlg::GetBkBrush( HWND hWnd, UINT nID, HBITMAP hBmBk )
{
	HWND hWndCtrl;

	hWndCtrl = ::GetDlgItem( hWnd, nID );
	
	HBRUSH	hBrushCtrl = NULL;

	if( NULL != hWndCtrl )
	{
		RECT rcCtrl;

		::GetWindowRect( hWndCtrl, &rcCtrl );
		::ScreenToClient(hWnd, (LPPOINT)&rcCtrl);
		::ScreenToClient(hWnd, ((LPPOINT)&rcCtrl)+1);

		HDC hDC = ::GetDC(hWnd);

		HDC hMemDCBk = CreateCompatibleDC( hDC );
		HDC hMemDCCtrl = CreateCompatibleDC( hDC );

		HBITMAP hBmCtrl = CreateCompatibleBitmap( hDC, _W(rcCtrl), _H(rcCtrl) );

		HBITMAP hBmOldBk;
		HBITMAP hBmOldCtrl;

		hBmOldBk = (HBITMAP) ::SelectObject( hMemDCBk, hBmBk );
		hBmOldCtrl = (HBITMAP) ::SelectObject( hMemDCCtrl, hBmCtrl );

		::BitBlt( hMemDCCtrl, 0, 0, _W(rcCtrl), _H(rcCtrl), hMemDCBk, _X(rcCtrl), _Y(rcCtrl), SRCCOPY );

		::SelectObject(hMemDCCtrl, hBmOldCtrl );
		::SelectObject(hMemDCBk, hBmOldBk );
		
		hBrushCtrl = ::CreatePatternBrush( hBmCtrl );

		DeleteObject( hBmCtrl );

		::DeleteDC( hMemDCBk );
		::DeleteDC( hMemDCCtrl );
		::ReleaseDC( hWnd, hDC );
	}

	return hBrushCtrl;
}



void CSimplePlayerDlg::OnButtonOpen() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_VIDEO_WINDOW)->ShowWindow(SW_HIDE);	
	if(FilePath1!=L""||m_FilterGraph->IsRunning())
       m_FilterGraph->Pause();
	if((rflag=fnFileViewer_Invoke(GetDlgItem(IDD_SIMPLEPLAYER_DIALOG)))==1)
	{
		unsigned short *pFilePath = fnFileViewer_GetCurFilePath();
		unsigned short *pFileName = fnFileViewer_GetCurFileName();
		card=0;

		FileName1=pFileName;
		m_text.SetWindowText(FileName1);
		wcscpy(FilePath1.GetBuffer(128),pFilePath);
		
		CSimplePlayerDlg::CreateGraph(FilePath1);

		GetDlgItem(IDC_VIDEO_WINDOW)->EnableWindow(TRUE);
		DisplayFileDuration();

			KillTimer(m_RollTimer);
		    len=FileName1.GetLength();
            m_nCount=len;
            if(len>=9)
			{
				   CString pp=L"                           ";
			       pp=pp+FileName1;
				   FileName1=pp;
				   len=FileName1.GetLength();
	    	       m_RollTimer=SetTimer(ROLL_TIMER, 300, NULL);
			}
	        else
			{
               m_text.SetWindowText(FileName1);
			}
        
    	ButtonPlayPause.LoadBitmaps(IDB_PAUSE1,IDB_PAUSE0);
		ButtonPlayPause.RedrawWindow();
        ButtonStop.LoadBitmaps(IDB_STOP1,IDB_STOP0);
        ButtonStop.RedrawWindow();
    	ButtonPreview.LoadBitmaps(IDB_PREVIEW1,IDB_PREVIEW0);
		ButtonPreview.RedrawWindow();
    	ButtonNext.LoadBitmaps(IDB_NEXT1,IDB_NEXT0);
		ButtonNext.RedrawWindow();

		((CButton*)GetDlgItem(ID_BUTTON_OPEN))->EnableWindow(true);    
	    ((CButton*)GetDlgItem(ID_BUTTON_STOP))->EnableWindow(true); 
	    ((CButton*)GetDlgItem(ID_BUTTON_PLAY))->EnableWindow(true); 
	    ((CButton*)GetDlgItem(ID_BUTTON_PREVIEW))->EnableWindow(true);
	    ((CButton*)GetDlgItem(ID_BUTTON_NEXT))->EnableWindow(true);

        m_flag1=false;
		    waveOutGetVolume(0,&AudiuAmpFactor);
	        nowshow=(int)(AudiuAmpFactor >> 12) & 0x000f;

			m_SliderVolume.SetPos(nowshow);
			m_FilterGraph->SetAudioVol(nowshow*4369);
            SaveVolume();
			m_SliderVolume.SetSelection(0, nowshow);
		    m_SliderVolume.SetSelectionColor(RGB(85, 145, 225));
		m_FilterGraph->Run();
	    if (m_SliderTimer == 0)
		{
		   m_SliderTimer = SetTimer(SLIDER_TIMER, 100, NULL);
		}
	
	}
	else
	{
		
		if(rflag==0)
		{

			waveOutGetVolume(0,&AudiuAmpFactor);
	        nowshow=(int)(AudiuAmpFactor >> 12) & 0x000f;

			m_SliderVolume.SetPos(nowshow);
			m_FilterGraph->SetAudioVol(nowshow*4369);
			SaveVolume();
			m_SliderVolume.SetSelection(0, nowshow);
		    m_SliderVolume.SetSelectionColor(RGB(85, 145, 225));
			GetDlgItem(IDC_VIDEO_WINDOW)->ShowWindow(SW_SHOW);
			if(FilePath1!=L""&&pauseflag==false)
			{
		    	m_FilterGraph->Run();
			    // Start a timer
		        if (m_SliderTimer == 0)
				{
			      m_SliderTimer = SetTimer(SLIDER_TIMER, 100, NULL);
				}
			}
			rflag=1;
			if(FilePath1==L"")
			{
			FilePath1=L"";
	        FileName1=L"VIDEO NAME";
			}
		}
	}
}



void CSimplePlayerDlg::CreateGraph(CString strSourceFile)
{
	CString FilePath=strSourceFile;
	CSimplePlayerDlg::DestroyGraph();
	m_FilterGraph = new CDXGraph();
	if (m_FilterGraph->Create())
	{
		// Render the source clip
		m_FilterGraph->RenderFile(FilePath);
		// Set video window and notification window
		m_FilterGraph->SetDisplayWindow(m_VideoWindow.GetSafeHwnd());
		m_FilterGraph->SetNotifyWindow(this->GetSafeHwnd());
		// Show the first frame
    	m_FilterGraph->Pause();
	}
}
		

void CSimplePlayerDlg::OnButtonPlay() 
{
	// TODO: Add your control notification handler code here
	if (m_flag1&&m_FilterGraph)
	{  
		m_flag1=false;
		pauseflag=false;
	    ButtonPlayPause.LoadBitmaps(IDB_PAUSE1,IDB_PAUSE0);
    	ButtonPlayPause.RedrawWindow();
        GetDlgItem(IDC_VIDEO_WINDOW)->ShowWindow(SW_SHOW);
		m_FilterGraph->SetAudioVol(nowshow*4369);
		SaveVolume();
		m_FilterGraph->Run();
		if (m_SliderTimer == 0)
		  {
		      m_SliderTimer = SetTimer(SLIDER_TIMER, 100, NULL);
		  }
	}
	else
	{   
		m_flag1=true;
		pauseflag=true;
		ButtonPlayPause.LoadBitmaps(IDB_PLAY1,IDB_PLAY0);
    	ButtonPlayPause.RedrawWindow();
		
		m_FilterGraph->Pause();
	}
}

void CSimplePlayerDlg::OnButtonPreview() 
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -