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

📄 dlgtoolsmedia.cpp

📁 混乱竞技场的全套代码,客户端资源可以网上搜
💻 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 + -