ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:26.81KB ,
资源ID:9524622      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9524622.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验3 数字视频播放器.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验3 数字视频播放器.docx

1、实验3 数字视频播放器实验2 数字视频播放器实验目的:1. 进一步掌握MCI函数的应用。2. 制作数字视频播放器,并具有以下功能:打开视频播放设备,播放视频文件,可静态观看每一帧视频,并且可设置播放速度,还能在全屏播放与正常播放之间转换。实验步骤:一 如实验1建立应用程序框架二 制作应用程序界面1. 制作对话框对话框控件属性表控件ID标题控件ID标题pictrueIDC_DISPLAY StaticIDC_PLAY_SOUNDGroup BoxIDC_STATIC视频信息StaticIDC_FRAMESStaticIDC_STATIC视频文件名:StaticIDC_DEMENSIONStati

2、cIDC_STATIC播放速度:ButtonIDC_OPEN打开StaticIDC_STATIC是否静音:ButtonIDC_PLAY播放StaticIDC_STATIC视频帧数:ButtonIDC_PAUSE暂停StaticIDC_STATIC视频尺寸:ButtonIDC_PRE上一帧StaticIDC_VIDEO_NAMEButtonIDC_NEXT下一帧StaticIDC_PLAY_SPEEDButtonIDC_STOP停止现在在应用程序中插入一个对话框资源,用来设置播放速度,其ID设为IDD_SPEED:IDD_SPEED对话框控件属性表控件ID标题Edit BoxIDC_SPEED1

3、ButtonIDOK确定ButtonIDCANCEL取消还需象应用程序中插入一个对话框资源,用做视频输出窗口,ID为IDD_DISPLAY。2. 制作菜单插入一个菜单资源,将ID设为IDR_MAINFRAME。IDR_MAINFRAME 中的菜单项菜单标题菜单项标题ID文件打开IDC_OPEN关闭IDC_OK选项静音IDC_SOUND全屏IDC_FULLSCREEN循环播放IDC_LOOP视频速度IDC_SPEED在你的主对话框的属性中的菜单项中,选中IDR_MAINFRAME现在编译一下,就得到了我们所要的界面。3. 添加消息处理函数在C*Dlg中需要添加的消息处理函数ID消息IDC_PLA

4、YBN_CLICKEDIDC_STOPBN_CLICKEDIDC_PAUSEBN_CLICKEDIDC_PREBN_CLICKEDIDC_NEXTBN_CLICKEDIDC_OPENBN_CLICKEDIDC_SPEEDCOMMANDIDC_FULLSCREENCOMMANDIDC_LOOPCOMMANDIDC_SOUNDCOMMANDC*DlgWM_TIMER然后为IDD_SPEED对话框资源添加一个int m_speed成员变量三 完成应用程序功能设计1. 将已设计好的类Cvideo加到你的工程中来,并使C*Dlg的头文件包含该类的头文件,然后在C*Dlg类的声明中加入以下代码:prote

5、cted: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,O

6、nPre, OnNext, OnSound, OnLoop, OnFullScreen, OnSpeedvoid 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=GetDl

7、gItem(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_pW

8、nd); 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()-

9、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); if(m_Video.GetSound() str=_T(否); else str=_T(是); SetDlgItemText(IDC_PLAY_SOUND

10、,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

11、)/单击文件选择对话框的“确定”键 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

12、,rect.bottom+30, m_Video.GetWidth()+Border,m_Video.GetHeight()+Caption+Border, 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_DEMEN

13、SION,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 c

14、ontrol 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() / TODO: Add your control notification handler code here m_Video.Forward(1);void CVideoPlayerDlg:OnSound() / TOD

15、O: 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:

16、Add your command handler code here m_bFullScreen=!m_bFullScreen;void CVideoPlayerDlg:OnLoop() / TODO: Add your command handler code here m_bLoop=!m_bLoop;现在编译执行,视频播放器变完成了。实验注意事项:1. 调试程序时,Ctrl+F7 为Compile,Build为F7,运行时按F5。2. 注意可重用类CVideo的设计。3. 熟练掌握MCI多媒体函数的应用。4. 编译时,菜单选中“项目”“设置”,要在库的链接中加入winmm.lib。/ V

17、ideo.cpp: implementation of the CVideo class./#include stdafx.h#include Video.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construction/Destruction/CVideo:CVideo() / 初始化成员变量 m_bOpened = m_bPaused = m_bPlaying = FALSE; m_wDeviceID = 0;CVideo:CVideo() Close (

18、);BOOL CVideo:Open (CString Filename, CWnd *pWnd, int left, int top) if (!m_bOpened) / 初始化成员变量 m_bOpened = m_bPaused = m_bPlaying = FALSE; m_wDeviceID = 0; / 文件是否存在 CFileStatus Status; if (!CFile:GetStatus (Filename, Status) return FALSE; / 打开设备 MCI_DGV_OPEN_PARMS OpenParms; OpenParms.lpstrDeviceTyp

19、e = avivideo;/设置播放设备为视频播放设备 OpenParms.lpstrElementName = (LPSTR) Filename.GetBuffer (0); OpenParms.wDeviceID = 0; OpenParms.hWndParent = pWnd-m_hWnd;/将要播放视频文件的主窗口 OpenParms.dwStyle = WS_CHILD | WS_VISIBLE; if (mciSendCommand (NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_DGV_OPEN

20、_PARENT | MCI_DGV_OPEN_WS, (DWORD)(LPVOID) &OpenParms) return FALSE; m_wDeviceID = OpenParms.wDeviceID; m_bOpened = TRUE; / 将文件长度设置为帧 MCI_DGV_SET_PARMS SetParms; SetParms.dwTimeFormat = MCI_FORMAT_FRAMES; if (mciSendCommand (m_wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)(LPVOID) &SetParms) Close

21、 (); return FALSE; / 找到视频文件的开始位置 mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL); /将播放画面置于主窗口之中 MCI_DGV_PUT_PARMS PutParms; PutParms.rc.left = left; PutParms.rc.top = top; PutParms.rc.right = GetWidth (); PutParms.rc.bottom = GetHeight (); if (mciSendCommand (m_wDeviceID, MCI_PUT, MC

22、I_WAIT | MCI_DGV_PUT_CLIENT | MCI_DGV_PUT_WINDOW | MCI_DGV_RECT, (DWORD)(LPVOID) &PutParms) Close (); return FALSE; return TRUE;void CVideo:Close (void) if (m_bOpened) / 停止播放并关闭设备 if (m_bPlaying | m_bPaused) mciSendCommand (m_wDeviceID, MCI_STOP, NULL, NULL); mciSendCommand (m_wDeviceID, MCI_CLOSE,

23、NULL, NULL); / 清空成员变量 m_bOpened = m_bPaused = m_bPlaying = FALSE; m_wDeviceID = 0; /获得视频文件窗口的宽度int CVideo:GetWidth (void) if (m_bOpened) MCI_DGV_WHERE_PARMS WhereParms; if (mciSendCommand (m_wDeviceID, MCI_WHERE, MCI_DGV_WHERE_SOURCE, (DWORD)(LPVOID) &WhereParms) return 0; return (int) WhereParms.rc

24、.right; return 0;/获得视频文件窗口的高度int CVideo:GetHeight (void) if (m_bOpened) MCI_DGV_WHERE_PARMS WhereParms; if (mciSendCommand (m_wDeviceID, MCI_WHERE, MCI_DGV_WHERE_SOURCE, (DWORD)(LPVOID) &WhereParms) return 0; return (int) WhereParms.rc.bottom; return 0;BOOL CVideo:Play (BOOL bLoop, BOOL bFullScreen)

25、 if (m_bOpened) / 如果是视频的尾部则重新开始播放 if (GetFrame () = GetFrames () mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL); / 播放 MCI_DGV_PLAY_PARMS PlayParms; PlayParms.dwCallback = NULL; PlayParms.dwFrom = GetFrame (); DWORD dwFlags = MCI_FROM; if (bLoop) dwFlags |= MCI_DGV_PLAY_REPEAT; if (b

26、FullScreen) dwFlags |= MCI_MCIAVI_PLAY_FULLSCREEN; if (mciSendCommand (m_wDeviceID, MCI_PLAY, dwFlags, (DWORD)(LPVOID) &PlayParms) return FALSE; m_bPaused = FALSE; m_bPlaying = TRUE; return TRUE; return FALSE;void CVideo:Stop (void) if (m_bOpened & m_bPlaying) mciSendCommand (m_wDeviceID, MCI_STOP,

27、NULL, NULL); mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL); m_bPlaying = FALSE; m_bPaused = FALSE; void CVideo:Pause( void ) if (m_bOpened & m_bPlaying) MCI_DGV_PAUSE_PARMS PauseParms; if (mciSendCommand (m_wDeviceID, MCI_PAUSE, 0, (DWORD)(LPVOID) &PauseParms) return; m_bPaused = T

28、RUE; int CVideo:GetFrames (void) if (m_bOpened) MCI_DGV_STATUS_PARMS StatusParms; StatusParms.dwItem = MCI_STATUS_LENGTH; if (mciSendCommand (m_wDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID) &StatusParms) return 0; return (int) StatusParms.dwReturn; return 0;int CVideo:GetFrame (void) if (m_bOpened) MCI_DGV_STATUS_PARMS StatusParms; StatusParms.dwItem =

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1