实验4 数字视频播放器120515修改
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OnNext, OnSound, OnLoop, OnFullScreen, OnSpeed void CVideoPlayerDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CWnd *m_pWnd=GetDlgItem(IDC_PLAY); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_PAUSE); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_STOP); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_NEXT); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_PRE); m_pWnd->EnableWindow(m_bIsOpen); if(m_bIsOpen) { CString Info; Info.Format("当前播放帧数:%d",m_Video.GetFrame()); m_pWnd=GetDlgItem(IDC_DISPLAY);//获得静态图像控件位置 CClientDC dc(m_pWnd); CRect rect; CBrush brush(COLORREF(0)),*OldBrush; OldBrush=(CBrush*)dc.SelectObject(brush); m_pWnd->GetClientRect(rect);//获得静态图像控件大小 dc.SetTextColor(COLORREF RGB(0,0,255)); dc.SetBkColor(COLORREF RGB(0,0,0)); dc.FillRect(rect,&brush); CSize size=dc.GetTextExtent(Info);//获得文本尺寸 dc.TextOut((rect.Width()-size.cx)/2,(rect.Height()-size.cy)/2,Info); dc.SelectObject(&OldBrush); CString str; str.Format("%d",m_Video.GetSpeed()); SetDlgItemText(IDC_PLAY_SPEED,str); str.Format("%d",m_Video.GetFrames()); SetDlgItemText(IDC_FRAMES,str);
标题
确定 取消
还需象应用程序中插入一个对话框资源,用做视频输出窗口,ID为 IDD_DISPLAY。 2. 制作菜单 插入一个菜单资源,将ID设为IDR_MAINFRAME。
菜单标题 文件 IDR_MAINFRAME 中的菜单项 菜单项标题 打开 关闭 选项 静音 全屏 循环播放 视频速度 ID IDC_OPEN IDC_OK IDC_SOUND IDC_FULLSCREEN IDC_LOOP IDC_SPEED
// TODO: Add your control notification handler code here m_Video.Forward(1); } void CVideoPlayerDlg::OnSound() { // TODO: Add your command handler code here m_bSound=!m_bSound; m_Video.SetSound(m_bSound); } void CVideoPlayerDlg::OnSpeed() { // TODO: Add your command handler code here CSpeed dlg; dlg.m_speed=m_Video.GetSpeed(); if(dlg.DoModal()==IDOK) m_Video.SetSpeed(dlg.m_speed); } void CVideoPlayerDlg::OnFullscreen() { // TODO: Add your command handler code here m_bFullScreen=!m_bFullScreen; } void CVideoPlayerDlg::OnLoop() { // TODO: Add your command handler code here m_bLoop=!m_bLoop; } 现在编译执行,视频播放器变完成了。
实验4 数字视频播放器 实验目的:
1. 进一步掌握MCI函数的应用。 2. 制作数字视频播放器,并具有以下功能:打开视频播放设备, 播放视频文件,可静态观看每一帧视频,并且可设置播放速 度,还能在全屏播放与正常播放之间转换。
实验步骤:
一 如实验1建立应用程序框架 二 制作应用程序界面 1. 制作对话框
对话框控件属性表 标题 控件 Static 视频信 息 视频文 件名: 播放速 度: 是否静 音: 视频帧 数: 视频尺 寸: Static Static Button Button Button Button Button
ID
标题
IDC_PLAY_SOUND IDC_FRAMES IDC_DEMENSION IDC_OPEN IDC_PLAY IDC_PAUSE IDC_PRE IDC_NEXT 打开 播放 暂停 上一 帧 下一
控件 pictrue Group Box Static Static Static Static Static Static
ID IDC_DISPLAY IDC_STATIC IDC_STATIC IDC_STATIC IDC_STATIC IDC_STATIC IDC_STATIC IDC_VIDEO_NAME
帧 Static IDC_PLAY_SPEED Button IDC_STOP 停止
现在在应用程序中插入一个对话框资源(插入—资源—对话框),用来 设置播放速度,其ID设为IDD_SPEED:
控件 Edit Box Button Button
IDD_SPEED对话框控件属性表 ID IDC_SPEED1 IDOK IDCANCEL
IDC_NEXT IDC_OPEN IDC_SPEED IDC_FUL源自文库SCREEN IDC_LOOP IDC_SOUND C***Dlg
BN_CLICKED BN_CLICKED COMMAND COMMAND COMMAND COMMAND WM_TIMER
然后为IDD_SPEED对话框资源添加一个int m_speed成员变量(选择 IDD_SPEED对话框资源,右键选中建立类向导,新建类CSpeed,在 该类中选中成员变量一项,选中IDC_SPEED1双击添加成员变量int m_speed) 三 完成应用程序功能设计 1. 将已设计好的类Cvideo加到你的工程中来(先把文件video.cpp 和video.h拷贝到工程文件目录,在fileview中分别选择源文件和 头文件目录,右键选择将文件添加到工程中,把这两个文件添 加进工程目录中),并使C***Dlg的头文件包含该类的头文件 (#include “video.h”; #include “speed.h” ),然后在C***Dlg类的 声明中加入以下代码: protected: CVideo m_Video; bool m_bIsOpen; bool m_bSound; bool m_bLoop; bool m_bFullScreen; CDialog *display; 2. 初始化你的主对话框 在OnInitDlialog()中// TODO: Add extra initialization here后加入以下代 码: display=new CDialog; display->Create(IDD_DISPLAY); SetTimer(1,100,NULL); 3. 完成消息函数OnTimer, OnOpen, OnPlay, OnStop, OnPause,OnPre,
SWP_SHOWWINDOW); display->ShowWindow(true); display->SetWindowText(FileDlg.GetFileName()); SetDlgItemText(IDC_VIDEO_NAME,FileDlg.GetFileName()); str.Format("%d×%d",m_Video.GetWidth(),m_Video.GetHeight()); SetDlgItemText(IDC_DEMENSION,str); m_bIsOpen=true; } } void CVideoPlayerDlg::OnPlay() { // TODO: Add your control notification handler code here m_Video.Play(m_bLoop,m_bFullScreen); } void CVideoPlayerDlg::OnStop() { // TODO: Add your control notification handler code here m_Video.Stop(); } void CVideoPlayerDlg::OnPause() { // TODO: Add your control notification handler code here m_Video.Pause(); } void CVideoPlayerDlg::OnPre() { // TODO: Add your control notification handler code here m_Video.Backward(1); } void CVideoPlayerDlg::OnNext() {
if(m_Video.GetSound()) str=_T("否"); else str=_T("是"); SetDlgItemText(IDC_PLAY_SOUND,str); } CDialog::OnTimer(nIDEvent); } void CVideoPlayerDlg::OnOpen() { // TODO: Add your control notification handler code here CString Filter,str; Filter=" 视频文件(*.AVI)|*.AVI||"; // 得到窗口尺寸 CRect rect; this->GetWindowRect(rect); CFileDialog FileDlg(true,NULL,NULL,OFN_HIDEREADONLY,Filter); if(FileDlg.DoModal()==IDOK)//单击文件选择对话框的“确定”键 { if(!m_Video.Open(FileDlg.GetPathName(),display,0,0))//打开视频文 件 { MessageBox("不能打开文件!","Error",MB_OK|MB_ICONSTOP); return; } //将显示屏幕定位在主对话框的下方,并根据视频大小确定屏幕大 小 int Border,Caption; Border=GetSystemMetrics(SM_CXSIZEFRAME); Caption=GetSystemMetrics(SM_CYCAPTION); display->SetWindowPos(this,rect.left+30,rect.bottom+30, m_Video.GetWidth()+Border,m_Video.GetHeight()+Caption+Border,
在你的主对话框的属性中的菜单项中,选中IDR_MAINFRAME 现在编译一下,就得到了我们所要的界面。 3. 添加消息处理函数(查看——建立类向导)
在C***Dlg中需要添加的消息处理函数 ID 消息 IDC_PLAY IDC_STOP IDC_PAUSE IDC_PRE BN_CLICKED BN_CLICKED BN_CLICKED BN_CLICKED