MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示

北京时间08点43分 2018年12月27号

前面的文章已经完成了界面设计,还有接受文件拖拽,这文章则是完成双击播放列表时播放文件。

首先,在类向导里面添加播放列表双击播放的响应函数。

MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示_第1张图片

添加代码:

void CVlcPlayerCsdnDlg::OnDblclkListPlay()
{
	int nIndex = m_listPlay.GetCurSel();
	if (LB_ERR == nIndex)
	{
		return;
	}

	CString strPath;
	CRect   rcVideo;

	GetDlgItem(IDC_PLAY)->GetClientRect(&rcVideo);
	InvalidateRect(rcVideo);
	m_listPlay.GetText(nIndex, strPath);

	if (m_cAVPlayer.Play((LPCSTR)UnicodeToUTF8(strPath)))//解决无法加载中文路径的问题
	{
		GetDlgItem(IDC_BUTTON_PLAY)->SetWindowText(_T("暂停"));
	}
}

UnicodeToUTF8的代码为:

CStringA UnicodeToUTF8(const CStringW& strWide)
{
	CStringA strUTF8;
	int nLen = ::WideCharToMultiByte(CP_UTF8, 0, strWide, -1, NULL, 0, NULL, NULL);

	if (nLen > 1)
	{
		::WideCharToMultiByte(CP_UTF8, 0, strWide, -1, strUTF8.GetBuffer(nLen - 1), nLen, NULL, NULL);
		strUTF8.ReleaseBuffer();
	}

	return strUTF8;
}

行,现在,拖拽文件后双击播放列表的运行效果为:

MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示_第2张图片

好啦,双击播放做完,接下来就是状态条的设置了,播放的时候状态条跟着播放进度前进。

添加自定义处理函数,现在头文件添加定义,再在MESSAGE_MAP消息映射进行绑定,最后进行函数定义。

MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示_第3张图片

MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示_第4张图片

LRESULT CVlcPlayerCsdnDlg::OnPosChanged(WPARAM wParam, LPARAM lParam)
{
	m_slider.SetPos(m_cAVPlayer.GetPos());
	CString s;
	int min = m_cAVPlayer.GetTime() / 1000 / 60;
	int sec = m_cAVPlayer.GetTime() / 1000 % 60;

	int min2 = m_cAVPlayer.GetLength() / 1000 / 60;
	int sec2 = m_cAVPlayer.GetLength() / 1000 % 60;


	s.Format(L"%02d:%02d/%02d:%02d", min, sec, min2, sec2);
	GetDlgItem(IDC_STATIC)->SetWindowText(s);


	return TRUE;
}
#define WM_USER_POS_CHANGED WM_USER + 1

这样时间轴就可以显示播放进度了。

MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示_第5张图片

而且static控件也能够动态显示播放时间。

下面就是如何实现拖拽时间轴进行播放进度的控制,原理还是在类向导添加处理函数,然后实现其处理函数,每一次拖拽进度条后都调用播放类的SetPos(int Pos)函数,从而达到调整的效果。

(==要熄灯了,先睡了)

(==上完课了,回来了)

在对话框的类向导里面添加消息响应函数,在OnHScroll()编写代码;MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示_第6张图片

void CVlcPlayerCsdnDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	m_cAVPlayer.SeekTo((float)m_slider.GetPos());
	CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}

运行一下,现在可以拖动进度条了。

MFC 基于VLC的视频播放器(四)---播放器的双击列表播放文件以及时间轴显示_第7张图片

然后,下面的文章将实现怎么实现里面的一些其他按钮,怎么全屏显示。

这次的源码下载地址

注意:1、本人是萌新,大佬们可以直接跳过阅读我的文章,写这个目的就是为了赚点分数以后可以用,当然也是想和其他萌新一起学习。

2、我会尽力快点更新,如果有什么问题大家可以在底下评论,我看到便会回复的,我的个人邮箱[email protected]

3、每一期我都会尽量放上源代码,希望能帮到大家的学习。

你可能感兴趣的:(libvlc)