📄 dlgtoolsmedia.cpp
字号:
// DlgToolsMedia.cpp : implementation file
//
#include "stdafx.h"
#include "gstools.h"
#include "DlgToolsMedia.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgToolsMedia dialog
CDlgToolsMedia::CDlgToolsMedia(CWnd* pParent /*=NULL*/)
: CDialog(CDlgToolsMedia::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgToolsMedia)
m_pos_media = 0;
m_volume = 0;
m_str_volume = _T("");
m_str_cur_pos = _T("");
m_str_format = _T("");
m_str_media_type = _T("");
m_str_info = _T("");
m_str_length = _T("");
m_is_looping = FALSE;
m_is_pause = FALSE;
//}}AFX_DATA_INIT
m_media_time = 0;
}
CDlgToolsMedia::~CDlgToolsMedia()
{
if(g_pToolsCtl)
g_pToolsCtl->SetTools(NULL);
}
void CDlgToolsMedia::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgToolsMedia)
DDX_Control(pDX, IDC_SLIDER2, m_slider_volume);
DDX_Control(pDX, IDC_SLIDER1, m_slider_media);
DDX_Slider(pDX, IDC_SLIDER1, m_pos_media);
DDX_Slider(pDX, IDC_SLIDER2, m_volume);
DDX_Text(pDX, IDC_VOLUME, m_str_volume);
DDX_Text(pDX, IDC_CUR_POS, m_str_cur_pos);
DDX_Text(pDX, IDC_FORMAT, m_str_format);
DDX_Text(pDX, IDC_FORMAT3, m_str_media_type);
DDX_Text(pDX, IDC_FORMAT2, m_str_info);
DDX_Text(pDX, IDC_LENGTH, m_str_length);
DDX_Check(pDX, IDC_CHECK1, m_is_looping);
DDX_Check(pDX, IDC_CHECK2, m_is_pause);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgToolsMedia, CDialog)
//{{AFX_MSG_MAP(CDlgToolsMedia)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSliderMediaPos)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER2, OnCustomdrawSliderMediaVolume)
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_BN_CLICKED(IDC_CHECK1, OnLooping)
ON_BN_CLICKED(IDC_CHECK2, OnPause)
ON_BN_CLICKED(IDC_STOP, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgToolsMedia message handlers
VOID CDlgToolsMedia::SetMedia(CGsMedia *pMedia)
{
m_ptr_media = pMedia;
if(m_ptr_media==NULL)
{
return;
}
LONGLONG pos, max;
m_ptr_media->GetPositions(pos, max);
m_slider_media.SetRange(0, max/10000);
m_pos_media = pos;
m_slider_volume.SetRange(-100, 0);
m_volume = m_ptr_media->GetVolume()/100;
m_ptr_media->GetDuration(m_media_time);
m_str_length = MediaTimeToString(m_media_time);
m_str_cur_pos = MediaTimeToString(0);
m_str_media_type = m_ptr_media->IsVideo() ? "视频" : "音频";
// m_str_format =
m_str_volume.Format("%d db", m_ptr_media->GetVolume());
m_is_looping = m_ptr_media->GetLooping();
m_is_pause = m_ptr_media->IsPause();
UpdateData(FALSE);
}
CString CDlgToolsMedia::MediaTimeToString(LONGLONG time)
{
unsigned long nTotalMS = (unsigned long) time / 10000; // 100ns -> ms
int nMS = nTotalMS % 1000;
int nSeconds = nTotalMS / 1000;
int nMinutes = nSeconds / 60;
nSeconds %= 60;
CString str;
str.Format("%02dm:%02d.%03ds\0", nMinutes, nSeconds, nMS);
return str;
}
void CDlgToolsMedia::OnCustomdrawSliderMediaPos(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int size = m_slider_media.GetRangeMax();
if(m_ptr_media==NULL || size<=0)
return;
UpdateData();
LONGLONG pos = m_media_time*m_pos_media/size;
m_str_cur_pos = MediaTimeToString(pos);
m_ptr_media->SetPositions(pos);
UpdateData(FALSE);
*pResult = 0;
}
void CDlgToolsMedia::OnCustomdrawSliderMediaVolume(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
if(m_ptr_media==NULL)
return;
UpdateData();
m_ptr_media->SetVolume(m_volume*100);
m_str_volume.Format("%d db", m_volume);
UpdateData(FALSE);
*pResult = 0;
}
BOOL CDlgToolsMedia::Create(CGsMedia *pMedia)
{
//{{AFX_DATA_INIT(CSplashWnd)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
if(NULL==g_pToolsCtl)
return FALSE;
if (!CDialog::Create(CDlgToolsMedia::IDD, g_pToolsCtl))
{
TRACE0("Warning: creation of CStartupDlg dialog failed\n");
return FALSE;
}
ShowWindow(SW_HIDE);
UpdateWindow();
g_pToolsCtl->SetTools(this);
SetMedia(pMedia);
return TRUE;
}
VOID CDlgToolsMedia::UpdateMediaInfos()
{
if(NULL==m_ptr_media)
return;
LONGLONG pos, max;
m_ptr_media->GetPositions(pos, max);
m_pos_media = pos/10000;
m_volume = m_ptr_media->GetVolume()/100;
m_str_cur_pos = MediaTimeToString(m_media_time*pos/max);
m_str_media_type = m_ptr_media->IsVideo() ? "视频" : "音频";
m_str_volume.Format("%d db", m_volume);
m_is_looping = m_ptr_media->GetLooping();
m_is_pause = m_ptr_media->IsPause();
UpdateData(FALSE);
}
void CDlgToolsMedia::OnPlay()
{
// TODO: Add your control notification handler code here
UpdateData();
if(!m_is_pause)
m_ptr_media->Play();
}
void CDlgToolsMedia::OnLooping()
{
// TODO: Add your control notification handler code here
UpdateData();
m_ptr_media->SetLooping(m_is_looping);
}
void CDlgToolsMedia::OnPause()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_is_pause)
{
m_ptr_media->Pause();
}
else
{
m_ptr_media->Play();
}
}
void CDlgToolsMedia::OnStop()
{
// TODO: Add your control notification handler code here
m_ptr_media->Stop();
// m_is_pause = FALSE;
// UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -