多媒体播放器设计(4)

2019-04-01 16:31

暂停、停止、抓图、退出等按钮控件。

下面对各个模块的实现函数及其代码做简要分析:

(1)单击播放器界面中的“打开”按钮,即可打开要播放的媒体文件。在下述代码中,将以只读方式打开要播放的文件,并且过滤了流媒体文件的格式,获取了媒体的路径和文件名。

void CMediaPlayerDlg::OnBnClickedButtonOpen() {

CString strFilter = _T(\VI File (*.avi) | *.avi|\

strFilter += \ strFilter += \ strFilter += \

strFilter += \ //编辑下拉选项框 CFileDialog

dlg(TRUE,NULL,NULL,OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, strFilter, this); //设置打开文件对话框

if (dlg.DoModal() == IDOK)//当用户打开文件时,做以下行为 { } }

(2)单击“播放”按钮后,开始选择播放的媒体文件。同时在标题栏中显示播放速率和媒体文件名,具体代码如下:

void CMediaPlayerDlg::OnBnClickedButtonPlay() {

if (m_pFilterGraph) //如果CDXGraph对象已创建成功,则执行以下代码 {

SetWindowText(_T(\倍速播放 \设置窗口标题m_pFilterGraph->Run(); //播放视频文件

m_pFilterGraph->ChangeAudioVolume(m_volume); //改变音量 栏文本内容

CreateGraph();创建链表,连接滤波器

m_sourceFile = dlg.GetPathName();//获取文件所在的路径名

m_mediaFileName =GetFileTitleFromFileName(m_sourceFile,1);//获取

文件名称

12

}

m_sliderVolume.SetPos(m_volume); //设置音量进度条的位置 if (m_playerTimer == 0) //设置定时器 { } }

(3)点击“暂停”按钮,暂停播放视频。 void CMediaPlayerDlg::OnBnClickedButtonPause()

m_playerTimer = SetTimer(SLIDER_TIMER, 100, NULL);

{ 码 { } }

(4)点击“停止”按钮,停止播放视频。 void CMediaPlayerDlg::OnBnClickedButtonStop() { 码 { } }

(5)点击“退出”按钮,退出程序。

void CMediaPlayerDlg::OnBnClickedButtonExit() {

CDialog::OnOK();//关闭窗口 OnBnClickedButtonStop();//停止播放 CoUninitialize();//关闭程序的所有线程

m_pFilterGraph->Stop();//停止播放视频

if (m_pFilterGraph != NULL)//如果CDXGraph对象不为空,则执行代m_pFilterGraph->Pause();//暂停播放视频

if (m_pFilterGraph != NULL)//如果CDXGraph对象不为空,则执行代

13

}

(6)点击“抓图”按钮,实现视频截图功能,并且将图片保存到软件的同一目录下。

void CMediaPlayerDlg::OnBnClickedButtonGrasp() {

static int c = 0;

TCHAR szFilename[MAX_PATH]; DWORD dwPathLen = 0;

if((dwPathLen=::GetModuleFileName(::AfxGetInstanceHandle(),szFilename, MAX_PATH ))== 0)//得到程序整个路径名长度 {

return; }

for( int i=dwPathLen-1; i>=0; i--)//获取图片保存的目录 {

if(('\\\\' == szFilename[i]) || ('/' == szFilename[i])) {

break; } else {

szFilename[i] = '\\0'; }

}

//设置图片保存的完整路径名称 CString str;

str.Format(_T(\

CString strTemp;

strTemp.Format(_T(\ str += strTemp + _T(\ c++;

TCHAR *p=str.GetBuffer(str.GetLength()); str.ReleaseBuffer();

//进行抓图,并且将图片放在指定路径下 if (m_pFilterGraph != NULL)

14

{ } }

(7)实现拖拽功能,使得手动拖动进度条控件,能够控制音量的大小以及视频的进度。

void CMediaPlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {

if(pScrollBar->GetSafeHwnd()==m_sliderPlayer.GetSafeHwnd()) //如果拖动消息来自视频进度条,则执行代码

{ 长度 置

}

else if(pScrollBar->GetSafeHwnd()==m_sliderVolume.GetSafeHwnd())//如果拖动消息来自音量进度条 量

}

{if (m_pFilterGraph != NULL)

{

m_volume = m_sliderVolume.GetPos();//获取音量进度条位置 m_pFilterGraph->ChangeAudioVolume(m_volume);//改变当前音}

double pos = duration * m_sliderPlayer.GetPos()/1000.0;//计算得到m_pFilterGraph->SetCurrentPosition(pos);//设置当前进度条的位

进度条位置

if (m_pFilterGraph != NULL)//CDXGraph对象不为空 {

double duration =1.0;//定义事件长度对象

m_pFilterGraph->GetDuration(&duration);//获取流媒体文件时间

if (m_pFilterGraph->SnapshotBitmap(p)) { }else

MessageBox(_T(\抓图失败!\

15

}

} else { }

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

(8)设置静音或非静音模式 void CMediaPlayerDlg::OnMenuMute() { { } }

(9)设置全屏播放模式。

void CMediaPlayerDlg::OnMenuFullscreen() { { {

m_pFilterGraph->SetFullScreen(TRUE);//设置为全屏模式 flag = 1;//设置信号量为真

m_pFilterGraph->SetFullScreen(FALSE);//关闭全屏模式 if (!flag)//判断信号量的值是否为真,即判断当前是否为全屏 static int flag=0; //设置信号量 if (m_pFilterGraph != NULL)

static int flag=0;//设置信号量

if (!flag)//判断信号量是否为真,即判断当前是否为静音模式 { { }

m_pFilterGraph->UnMute();//设置为非静音模式 flag = 0;设置信号量为假

m_pFilterGraph->Mute();//设置为静音模式 flag = 1;//设置信号量为真

if (m_pFilterGraph != NULL)//CDXGraph对象不为空

}else

}else{

16


多媒体播放器设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第二章 赋范线性空间-黎永锦

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: