📄 videoplaydlg.cpp
字号:
// VideoPlayDlg.cpp : implementation file
//
#include "stdafx.h"
#include "VideoPlay.h"
#include "VideoPlayDlg.h"
#include "FileListDlg.h"
#include "Coordinate.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CStringList g_StrList;
int g_nCurSelItem = 0;
typedef enum {
VIDEO_CTRL_CLOSE,
VIDEO_CTRL_PLAY,
VIDEO_CTRL_STOP,
VIDEO_CTRL_BACKWARD,
VIDEO_CTRL_FORWARD,
VIDEO_CTRL_OPEN,
VIDEO_CTRL_FULLSCREEN,
VIDEO_CTRL_VOLUME,
VIDEO_CTRL_PROSLIDER,
VIDEO_CTRL_VOLSLIDER,
VIDEO_CTRL_COUNT,
}VIDEOCTRL;
POINT VideoBtnPos[VIDEO_CTRL_COUNT] ={
{CLOSE_BTN_X, CLOSE_BTN_Y}, //close
{PLAY_BTN_X, PLAY_BTN_Y}, //play
{STOP_BTN_X, STOP_BTN_Y}, //stop
{BACKWARD_BTN_X, BACKWARD_BTN_Y}, //backward
{FORWARD_BTN_X, FORWARD_BTN_Y}, //forward
{OPEN_BTN_X, OPEN_BTN_Y}, //open
{FULLSCREEN_BTN_X, FULLSCREEN_BTN_Y}, //fullscrenn
{VOL_BTN_X, VOL_BTN_Y}, //volume
{PRO_SLIDE_X, PRO_SLIDE_Y}, //program slide
{VOL_SLIDE_X, VOL_SLIDE_Y} //volume slide
};
CRect RectVideoTitle(VIDEO_TITLE_LEFT, VIDEO_TITLE_TOP, VIDEO_TITLE_RIGHT, VIDEO_TITLE_BOTTOM);
CRect RectVideoTime(TIME_LEFT, TIME_TOP, TIME_RIGHT, TIME_BOTTOM);
CRect RectVideoPlay(VIDEO_PLAY_LEFT, VIDEO_PLAY_TOP, VIDEO_PLAY_RIGHT, VIDEO_PLAY_BOTTOM);
void IncreaseVolume();
void DecreaseVolume();
/////////////////////////////////////////////////////////////////////////////
// CVideoPlayDlg dialog
CVideoPlayDlg::CVideoPlayDlg(CWnd* pParent /*=NULL*/)
: CDialog(CVideoPlayDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CVideoPlayDlg)
//}}AFX_DATA_INIT
memset(m_chFileName,0,sizeof(TCHAR)*MAX_STRING);
//init variable
m_bMute = FALSE;
m_nVolume = VOL_DEFAULT;
m_nTimeHour = 0;
m_nTimeMin = 0;
m_nTimeSec = 0;
}
void CVideoPlayDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CVideoPlayDlg)
DDX_Control(pDX, IDC_SLIDER_VOL, m_sliderVol);
DDX_Control(pDX, IDC_SLIDER_PRO, m_sliderPro);
DDX_Control(pDX, IDC_STATIC_TITLE, m_Title);
DDX_Control(pDX, IDC_STATIC_TIME, m_Time);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CVideoPlayDlg, CDialog)
//{{AFX_MSG_MAP(CVideoPlayDlg)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_BN_CLICKED(IDC_CLOSE, OnClose)
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_BN_CLICKED(IDC_STOP, OnStop)
ON_BN_CLICKED(IDC_PAUSE, OnPause)
ON_BN_CLICKED(IDC_MUTE, OnMute)
ON_BN_CLICKED(IDC_VOL, OnVol)
ON_BN_CLICKED(IDC_OPEN, OnOpenFile)
ON_BN_CLICKED(IDC_FORWARD, OnNextFile)
ON_BN_CLICKED(IDC_BACKWARD, OnLastFile)
ON_WM_CTLCOLOR()
ON_WM_TIMER()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_BITMAPSLIDER_MOVED, OnBitmapSliderMoved)
ON_MESSAGE(WM_BITMAPSLIDER_MOVING, OnBitmapSliderMoving)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVideoPlayDlg message handlers
BOOL CVideoPlayDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowPos(NULL, VIDEO_LEFT, VIDEO_TOP, VIDEO_WIDTH, VIDEO_HEIGHT, SWP_SHOWWINDOW);
// ModifyStyle(WS_CAPTION,NULL,SWP_DRAWFRAME);
// ModifyStyleEx(WS_EX_DLGMODALFRAME,NULL,SWP_DRAWFRAME);
//load bk bitmap
#ifdef SCREEN_320X240
m_BMPBG.LoadBitmap(IDB_BACKGROUND320);
#else
m_BMPBG.LoadBitmap(IDB_BACKGROUND480);
#endif
LoadAndLocateButtons();
//add battery
VERIFY(m_bat.Create(NULL, WS_VISIBLE|WS_CHILD|SS_BITMAP, CRect(412,256,436,266), this));
RegisterBatteryWndToMainUI(m_bat.GetSafeHwnd());
m_Time.MoveWindow(&RectVideoTime);
m_Title.MoveWindow(&RectVideoTitle);
//slider program
m_sliderPro.SetBitmapChannel(IDB_PROSLIDE_ACTIVE, IDB_PROSLIDER);
// m_sliderPro.SetBitmapThumb( IDB_PRO_THUMB_A, IDB_PRO_THUMB_B, TRUE );
m_sliderPro.DrawFocusRect( FALSE );
m_nMin = 0;
m_nMax = m_nProWidth;
m_nPos = 0;
m_sliderPro.SetRange( m_nMin, m_nMax );
m_sliderPro.SetPos( m_nPos );
// m_sliderPro.SetMargin( 0, 2, 0, 0 );
//slider volume
m_sliderVol.SetBitmapChannel( IDB_VOL_OFF, IDB_VOL_ON, TRUE );
m_sliderVol.SetRange( 0, m_nVolWidth);
m_sliderVol.SetMarginLeft( 2 );
m_sliderVol.SetMarginRight( 2 );
//set position
// double dd = (double)m_nVolume/VOL_SILENCE;
// int i = dd*m_nVolWidth;
m_sliderVol.SetPos((int)(((double)m_nVolume/VOL_SILENCE)*m_nVolWidth));
m_fullScreen = FALSE;
//initialize video play window
m_videoWindow.left = VIDEO_PLAY_LEFT;
m_videoWindow.top = VIDEO_PLAY_TOP;
m_videoWindow.right = VIDEO_PLAY_RIGHT;
m_videoWindow.bottom = VIDEO_PLAY_BOTTOM;
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CVideoPlayDlg::LoadAndLocateButtons()
{
CRect btnRect;
VERIFY(m_btnClose.AutoLoad(IDC_CLOSE, this));
m_btnClose.GetClientRect(&btnRect);
m_btnClose.MoveWindow(VideoBtnPos[VIDEO_CTRL_CLOSE].x, VideoBtnPos[VIDEO_CTRL_CLOSE].y, btnRect.Width(), btnRect.Height(), FALSE);
VERIFY(m_btnPlay.AutoLoad(IDC_PLAY, this));
m_btnPlay.GetClientRect(&btnRect);
m_btnPlay.MoveWindow(VideoBtnPos[VIDEO_CTRL_PLAY].x, VideoBtnPos[VIDEO_CTRL_PLAY].y, btnRect.Width(), btnRect.Height(), FALSE);
VERIFY(m_btnPause.AutoLoad(IDC_PAUSE, this));
m_btnPause.GetClientRect(&btnRect);
m_btnPause.MoveWindow(VideoBtnPos[VIDEO_CTRL_PLAY].x, VideoBtnPos[VIDEO_CTRL_PLAY].y, btnRect.Width(), btnRect.Height(), FALSE);
m_btnPause.ShowWindow(SW_HIDE);
VERIFY(m_btnStop.AutoLoad(IDC_STOP, this));
m_btnStop.GetClientRect(&btnRect);
m_btnStop.MoveWindow(VideoBtnPos[VIDEO_CTRL_STOP].x, VideoBtnPos[VIDEO_CTRL_STOP].y, btnRect.Width(), btnRect.Height(), FALSE);
VERIFY(m_btnBackward.AutoLoad(IDC_BACKWARD, this));
m_btnBackward.GetClientRect(&btnRect);
m_btnBackward.MoveWindow(VideoBtnPos[VIDEO_CTRL_BACKWARD].x, VideoBtnPos[VIDEO_CTRL_BACKWARD].y, btnRect.Width(), btnRect.Height(), FALSE);
VERIFY(m_btnForward.AutoLoad(IDC_FORWARD, this));
m_btnForward.GetClientRect(&btnRect);
m_btnForward.MoveWindow(VideoBtnPos[VIDEO_CTRL_FORWARD].x, VideoBtnPos[VIDEO_CTRL_FORWARD].y, btnRect.Width(), btnRect.Height(), FALSE);
VERIFY(m_btnOpen.AutoLoad(IDC_OPEN, this));
m_btnOpen.GetClientRect(&btnRect);
m_btnOpen.MoveWindow(VideoBtnPos[VIDEO_CTRL_OPEN].x, VideoBtnPos[VIDEO_CTRL_OPEN].y, btnRect.Width(), btnRect.Height(), FALSE);
//program slide
m_sliderPro.GetClientRect(&btnRect);
m_nProWidth = btnRect.Width();
m_sliderPro.MoveWindow(VideoBtnPos[VIDEO_CTRL_PROSLIDER].x, VideoBtnPos[VIDEO_CTRL_PROSLIDER].y, btnRect.Width(), btnRect.Height(), FALSE);
//volume slide
m_sliderVol.GetClientRect(&btnRect);
m_sliderVol.MoveWindow(VideoBtnPos[VIDEO_CTRL_VOLSLIDER].x, VideoBtnPos[VIDEO_CTRL_VOLSLIDER].y, btnRect.Width(), btnRect.Height(), FALSE);
}
void CVideoPlayDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CBrush nBrush(RGB(16,0,16)); // chroma key of TCCVrenderer
dc.FillRect(&m_videoWindow, &nBrush);
if(!m_fullScreen)
{
RECT rc;
rc.left = VIDEO_PLAY_LEFT;
rc.top = VIDEO_PLAY_BOTTOM;
rc.right = VIDEO_PLAY_RIGHT;
rc.bottom = VIDEO_HEIGHT;
CXTMemDC m_Memdc(&dc,rc);
m_Memdc.SelectObject(&m_BMPBG);
}
// Do not call CDialog::OnPaint() for painting messages
}
BOOL CVideoPlayDlg::OnEraseBkgnd(CDC* pDC)
{
// Erase the remainder of the dialog as usual
CDialog::OnEraseBkgnd(pDC);
return TRUE;
}
void CVideoPlayDlg::OnClose()
{
//del battery
UnregisterBatteryWndToMainUI(m_bat.GetSafeHwnd());
m_bat.DestroyWindow();
m_BMPBG.DeleteObject();
#ifdef TESTPLAYER
if(m_Player.play_state != STATE_STOP)
m_Player.stop();
m_Player.release();
#endif
CDialog::OnOK();
}
void CVideoPlayDlg::VideoPlay()
{
//kill timer
KillTimer(TIME_VIDEO_SECID);
//initialize player
#ifdef TESTPLAYER
if((m_Player.play_state == STATE_PLAY) ||(m_Player.play_state == STATE_PAUSE))
m_Player.stop();
m_Player.release();
int len = WideCharToMultiByte(CP_ACP, 0, m_chFileName, -1, NULL, 0, NULL, NULL);
char* szTarget = new char[len + 1];
memset(szTarget, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0,m_chFileName, -1, szTarget, len, NULL,NULL);
printf("m_chFileName = %s \n", szTarget);
delete[] szTarget;
m_Player.Initialize(m_hWnd, m_chFileName);
#endif
//get duration
GetVideoDuration();
DisplayTitle();
//set initialize volume
#ifdef TESTPLAYER
m_Player.SetVolume(m_nVolume);
#endif
//play video
OnPlay();
}
void CVideoPlayDlg::OnPlay()
{
// TODO: Add your control notification handler code here
#ifdef TESTPLAYER
if((m_chFileName[0])&&(m_Player.play_state != STATE_PLAY))
{
m_Player.play();
printf("Video play \n");
m_btnPlay.ShowWindow(SW_HIDE); //SW_HIDE
m_btnPause.ShowWindow(SW_SHOW); //SW_SHOW
//set current time int
if(m_Player.play_state == STATE_PLAY)
SetTimer(TIME_VIDEO_SECID,1000,NULL);
}
#endif
}
void CVideoPlayDlg::OnPause()
{
// TODO: Add your control notification handler code here
#ifdef TESTPLAYER
if((m_chFileName[0])&&(m_Player.play_state == STATE_PLAY))
{
m_Player.pause();
printf("video pause \n");
m_btnPlay.ShowWindow(SW_SHOW);
m_btnPause.ShowWindow(SW_HIDE);
}
#endif
}
void CVideoPlayDlg::OnStop()
{
// TODO: Add your control notification handler code here
if(m_chFileName[0])
{
#ifdef TESTPLAYER
m_Player.stop();
#endif
printf("video stop \n");
KillTimer(TIME_VIDEO_SECID);
m_btnPlay.ShowWindow(SW_SHOW);
m_btnPause.ShowWindow(SW_HIDE);
ResetTimeAndSlider();
if(m_fullScreen == TRUE)
{
SwitchFullScreen();
Invalidate();
}
}
}
void CVideoPlayDlg::OnMute()
{
// TODO: Add your control notification handler code here
m_bMute = FALSE;
#ifdef TESTPLAYER
m_Player.SetVolume(m_nVolume);
#endif
m_btnVol.ShowWindow(SW_SHOW);
m_btnMute.ShowWindow(SW_HIDE);
}
void CVideoPlayDlg::OnVol()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -