📄 simpleplayerdlg.cpp
字号:
// 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 + -