版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一.课题名称:视屏播放器软件设计及开发文档PLAYER1:(基于ActiveMovie控件)1-三、需求分析与问题陈述:。设计动画播放器,可以通过动画控件播放动画,用文件公用对话框打开AVI文件并播放,也可以通过鼠标左右键控制;播放时若用鼠标左键单击画面,可以暂停播放,若用右键单击画面,可以直接对画面进行播放,暂停,停止等控制,可以设置全屏效果。1-四、设计目标与设计任务:。一开始准备设计一个基于对话框的工程,并为这个对话框定义以下八个按钮:OPEN 打开AVI文件PLAY 开始播放文件PAUSE 暂停播放STOP 停止播放FULLSCREEM 设置全屏EXIT 退出ADD 增加音量REDUC
2、E 减少音量(模型一效果图)后来为与播放器2区别,使用菜单方式,将按钮功能用菜单中的按键实现。(菜单)整体效果如下:其次,添加鼠标消息响应,实现单击屏幕暂停(或继续)播放的功能。实现双击屏幕全屏(或恢复原始大小)的功能1-五、解题算法思想:。向对话框添加ActiveMovie控件,并为其添加相应的变量,利用其成员函数实现目标功能。主要代码如下。1.实现播放文件的代码:void CPlayerDlg:OnPlaystart() m_AMovie.Run(); SetTimer(0,20,NULL); /设置定时器2.实现播放暂停的代码:void CPlayerDlg:OnPlaypause()
3、m_AMovie.stop(); 3.实现停止播放的代码:void CPlayerDlg:OnPlaystop() m_AMovie.Stop(); KillTimer(0); /关掉定时器4.实现退出播放的代码:void CPlayerDlg:OnFileexit() OnCancel();5.实现全屏的代码:void CPlayerDlg:OnBtnAllShow() / TODO: Add your command handler code herem_AMovie.Pause();m_AMovie.SetFullScreenMode(true);m_AMovie.SetMovieWin
4、dowSize(SW_SHOWMAXIMIZED);m_AMovie.Run();6.实现文件打开的代码:void CPlayerDlg:OnFileopen() char szFileFilter="Mp3 File(*.mp3)|*.mp3|""Wma File(*.wma)|*.wma|""Video File(*.dat)|*.dat|""Wave File(*.wav)|*.wav|""AVI File(*.avi)|*.avi|""Movie File(*.mov)|*.m
5、ov|" "Media File(*.mmm)|*.mmm|""Mid File(*.mid;*,rmi)|*.mid;*.rmi|""MPEG File(*.mpeg)|*.mpeg|""All File(*.*)|*.*|" CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal()=IDOK) CString PathName=dlg.GetPathName(); PathName.MakeUpper
6、(); m_AMovie.SetFileName(PathName); SetWindowText(m_AMovie.GetFileName(); 7实现鼠标单击屏幕暂停(或继续)播放的功能的代码:void CPlayerDlg:OnClickAmovie() if(ispause=true)m_AMovie.Run(); ispause=false;else m_AMovie.Pause();ispause=true;8.实现鼠标双击屏幕全屏(或恢复原始大小)的功能的代码:void CPlayerDlg:OnDblClickAmovie() / TODO: Add your control
7、notification handler code herem_AMovie.Pause();if(m_AMovie.GetFullScreenMode()=1)m_AMovie.SetFullScreenMode(false);m_AMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);elsem_AMovie.SetFullScreenMode(true);m_AMovie.SetMovieWindowSize(SW_SHOWNORMAL);m_AMovie.Run();9.对于音量的调节,我们并没有采用按钮或者按键的方式实现。我们使用了进度条控件。首先,我
8、们新增了一个对话框,在新对话框上插入一个进度条,并新增相应的控件变量。通过移动进度条来改变动画的声音。主要代码代码如下:void CVolumeDlg:SetVolume(CActiveMovie3 *pAmovie) m_pAMovie=pAmovie;/ 如果未打开任何媒体文件,则音量调节不可用。ActiveMovie 控件的 / CurrentState 属性返回控件的当前状态,-1 表示未打开任何文件,此时弹出/ 出错提示信息。 if (m_pAMovie->GetCurrentState()!=-1)DoModal(); else MessageBox("音频设备尚未
9、加载,请先打开一个媒体文件。"); void CVolumeDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)/ TODO: Add your message handler code here and/or call default CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;int nVolume=pSlider->GetPos();m_pAMovie->SetVolume(nVolume);CDialog:OnHScroll(nSBCode,
10、nPos, pScrollBar);BOOL CVolumeDlg:OnInitDialog()CDialog:OnInitDialog(); m_sld.SetRange(-10000, 0); m_sld.SetTicFreq(1000); m_sld.SetLineSize(200); m_sld.SetPageSize(1000); m_sld.SetPos(m_pAMovie->GetVolume(); return TRUE;1-六、数据结构描述:。类中新增变量及其作用:1. m_AMovie,是与控件ActiveMovie相关的变量,通过处理该变量对播放器进行功能实现。2.
11、 m_pAMovie,是指向ActiveMovie类的指针变量,存在于音量控制对话框类里,用于两个对话框之间消息的传递传递。3. m_sld,是与滑动条控件相关的变量。通过处理该变量实现音量的改变。PLAYER2:(基于windows media player控件)2-三、需求分析与问题陈述:。 设计多媒体播放器,主要通过windows media player控件实现该播放器的主要功能。界面以按钮为主,并通过按钮实现对播放文件的各项控制。主要有文件打开、播放、暂停、停止、全屏以及音量、播放模式和播放列表的操作。由于该软件为多媒体播放器,所以程序需要要支持多种格式的文件。除此之外,还设置了Es
12、c热键以实现退出全屏的快捷操作。2-四、设计目标与设计任务:。一开始按照书上案例要求设计一个基于对话框的工程,并为这个对话框定义以下八个按钮:OPEN 打开AVI文件PLAY 开始播放文件PAUSE 暂停播放STOP 停止播放FULLSCREEM 设置全屏EXIT 退出ADD 增加音量REDUCE 减少音量(图1.模型1效果图如下)在继续设计的过程中,我们为实现播放器功能的多样化、人性化,又相继增加了播放列表控件、播放列表操作组合空件和播放模式组合控件。而且将音量控制进行改善,不仅增加了静音控制,还将音量控制改变为控制条形式,使得更为直观。(图2.模型二效果图如下) 而后期在对播放器界面美化过
13、程中,相继为播放器添加了背景图片以及改变了对话框的图标,还有稍微调整了按钮的排布。最终播放器界面效果如下图:其次,添加按钮、鼠标、键盘消息响应,实现整体播放的功能。如:实现双击屏幕全屏(或恢复原始大小)的功能;Esc键实现退出全屏功能等等。2-五.解题算法思想:。向对话框添加windows media player控件(如下图),并为其添加相应的变量 CWMPPlayer m_player,利用其成员函数实现目标功能。主要代码如下:由于要对wmp播放器实现控制,还要添加其他三个成员变量: CWMPMedia m_media;CWMPSettings m_setting;CWMPControls
14、 m_control;所以还需要添加上述三个类的头文件: / wmplayerDlg.h : header file / #include "wmpcontrols.h" #include "wmpsettings.h" #include "wmpplaylist.h"1.实现播放文件的代码:void CWmplayerDlg:OnPlayer() / TODO: Add your control notification handler code hereCFileFind finder;if(m_list.GetCount()&l
15、t;=0) MessageBox("列表无文件!","Warning",MB_OK); spaceflag=1; else if(!finder.FindFile(m_player.GetUrl() MessageBox("文件不已存在,该列项将被删除!", "Warning",MB_OK); CWmplayerDlg:Ondelitem(); else KillTimer(0); m_control.play(); if(m_control.GetCurrentPosition()=0) m_control.Se
16、tCurrentPosition(0.01); SetTimer(0,20,NULL); spaceflag=0; 2. 实现播放暂停的代码:void CWmplayerDlg:Onpause() / TODO: Add your control notification handler code herem_control.pause(); 3.实现停止播放的代码:void CWmplayerDlg:Onstop() / TODO: Add your control notification handler code hereKillTimer(0); m_control.stop();4.
17、 实现退出播放的代码:运用默认对话框初始的取消按钮,并对其属性进行修改。进而实现退出播放器的功能。5. 实现全屏的代码:void CWmplayerDlg:Onfull() / TODO: Add your control notification handler code hereif(m_control.GetCurrentPosition()!=0&&!m_player.GetFullScreen() m_control.pause(); m_player.SetFullScreen(true); m_control.play(); 6.实现文件打开的代码:void CW
18、mplayerDlg:OnOK() / TODO: Add extra validation herem_listCtrl.SetFocus(); CString str; POSITION pos; pos = m_listCtrl.GetFirstSelectedItemPosition(); IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetItemState(IndexInFieldList,LVIS_SELECTED, LVIS_SELECTED); TCHAR szFilter = _T(&q
19、uot;Mp3 File(*.mp3)|*.mp3 | Wma File(*.wma)|*.wma | Video File(*.dat)|*.dat | Wave File(*.wav)|*.wav | AVI File(*.avi)|*.avi | Movie File(*.mov)|*.mov | Media File(*.mmm)|*.mmm | Mid File(*.mid;*,rmi)|*.mid;*.rmi| MPEG File(*.mpeg)|*.mpeg| All File(*.*)|*.*|"); CFileDialog fileDlg(TRUE,NULL, NU
20、LL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this); CString strFilePath; if (IDOK = fileDlg.DoModal() strFilePath = fileDlg.GetPathName(); strFilePath.MakeUpper(); m_player.SetUrl(strFilePath); m_media=static_cast<CWMPMedia>(m_player.newMedia(strFilePath); m_list.appendItem(m_media); m
21、_listCtrl.InsertItem(0,m_media.GetName();m_listCtrl.SetItemText(0,1,_T(m_media.getItemInfo("FileType"); m_listCtrl.SetItemText(0,2,_T(m_media.GetDurationString(); m_listCtrl.SetItemText(0,3,_T(strFilePath); m_listCtrl.SetItemText(0,4,_T(m_media.getItemInfo("Duration"); m_player.S
22、etUrl(m_listCtrl.GetItemText(0,3); m_listCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); /CDialog:OnOK();6. 实现播放器快进、快退功能的代码:void CWmplayerDlg:Onreverse() / TODO: Add your control notification handler code heredouble t = m_control.GetCurrentPosition(); m_control.SetCurrentPosition(t=t-10);void CWmp
23、layerDlg:Onforward() double t = m_control.GetCurrentPosition(); m_control.SetCurrentPosition(t=t+10);7. 实现播放器播放列表的代码:void CWmplayerDlg:Onplaylist() flag=!flag; / TODO: Add your control notification handler code here if(flag) SetWindowPos(NULL,0,0,420,505,SWP_NOMOVE); else SetWindowPos(NULL,0,0,650,5
24、05,SWP_NOMOVE);8. 实现播放器播放模式的代码:void CWmplayerDlg:OnTimer(UINT nIDEvent)switch(nIDEvent)case 0: if(m_control.GetCurrentPosition()=0)m_schedule.SetPos(0);SetDlgItemText(IDC_CURRENT,"00:00");SetDlgItemText(IDC_DURATION,"00:00");switch(m_order)case 0:KillTimer(0);POSITION pos;pos = m
25、_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetFocus();if(IndexInFieldList = m_listCtrl.GetItemCount()-1)m_listCtrl.SetItemState(IndexInFieldList, LVIS_SELECTED,LVIS_SELECTED);m_control.stop();return;m_listCtrl.SetItemState(IndexInField
26、List,LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList+1, LVIS_SELECTED,LVIS_SELECTED);CString strName=m_listCtrl.GetItemText(IndexInFieldList+1,3);m_player.SetUrl(strName);CWmplayerDlg:OnPlayer();break;case 1:KillTimer(0);m_listCtrl.SetFocus();POSITION pos;pos = m_listCtrl.GetFi
27、rstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos);m_listCtrl.SetItemState(IndexInFieldList,LVIS_SELECTED,LVIS_SELECTED);int i;srand(unsigned)time( NULL );i=rand()%m_listCtrl.GetItemCount();m_listCtrl.SetItemState(i, LVIS_SELECTED,LVIS_SELECTED);CString strName=m_listCt
28、rl.GetItemText(i,3);m_player.SetUrl(strName);CWmplayerDlg:OnPlayer();break; case 2:KillTimer(0);POSITION pos;pos = m_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetFocus();if(IndexInFieldList = m_listCtrl.GetItemCount()-1)IndexInFieldLis
29、t=-1;m_listCtrl.SetItemState(IndexInFieldList,LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList+1, LVIS_SELECTED,LVIS_SELECTED);CString strName=m_listCtrl.GetItemText(IndexInFieldList+1,3);m_player.SetUrl(strName);CWmplayerDlg:OnPlayer();break; case 3:KillTimer(0);CWmplayerDlg:On
30、Player();break;default:KillTimer(0);break;break;POSITION pos;double td;pos = m_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos);td=_ttol(m_listCtrl.GetItemText(IndexInFieldList,4);m_schedule.SetPos(int)(m_control.GetCurrentPosition()/td)*200);SetDlgItemT
31、ext(IDC_DURATION,m_listCtrl.GetItemText(IndexInFieldList,2);SetDlgItemText(IDC_CURRENT,m_control.GetCurrentPositionString();break;CDialog:OnTimer(nIDEvent);9. 实现播放器播放文件操作的代码(以选中项上衣为例):void CWmplayerDlg:Onitemup() / TODO: Add your control notification handler code herem_listCtrl.SetFocus(); POSITION
32、pos; int num; CString name; CString form; CString length; CString strName; CString duration; UINT flag1 = LVIS_SELECTED|LVIS_FOCUSED;pos = m_listCtrl.GetFirstSelectedItemPosition(); IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); if(IndexInFieldList = -1) AfxMessageBox("列表内没有被选中项!"
33、); return; if(IndexInFieldList = 0) AfxMessageBox("已经到了列表头部!");m_listCtrl.SetItemState(IndexInFieldList, flag1, flag1); return; num=IndexInFieldList; name=m_listCtrl.GetItemText(num,0);form=m_listCtrl.GetItemText(num,1); length=m_listCtrl.GetItemText(num,2); strName=m_listCtrl.GetItemText(
34、num,3); duration=m_listCtrl.GetItemText(num,4); m_listCtrl.DeleteItem(num); m_listCtrl.InsertItem(num-1,_T(name); m_listCtrl.SetItemText(num-1,1,_T(form); m_listCtrl.SetItemText(num-1,2,_T(length); m_listCtrl.SetItemText(num-1,3,_T(strName);m_listCtrl.SetItemText(num-1,4,_T(duration); m_listCtrl.Set
35、ItemState(IndexInFieldList-1, flag1, flag1); 10. 实现播放器播放热键操作的代码:BOOL CWmplayerDlg:PreTranslateMessage(MSG* pMsg) / TODO: Add your specialized code here and/or call the base classif(pMsg->message=WM_KEYDOWN) switch(pMsg->wParam) case VK_ESCAPE: /ESC键 if(m_control.GetCurrentPosition()!=0&& m_player.GetFullScreen() m_player.SetFullScreen(false); else SendMessage(WM_CLOSE); return TRUE; break; case VK_SPACE: /空格键 if(spaceflag=0) CWmplayerDlg:Onpause(); else if(spaceflag=1) CWmplayerDlg:OnPlayer(); return
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 就业协议与劳动合同的五大区别点
- 受托收款合同范本
- 承揽合同与劳务分包合同的差异解读
- 服务终止合同
- 食品果蔬购销合同
- 定制月饼销售协议
- 砂石材料买卖合同样本
- 合同违约责任合同仲裁
- 变压器设备采购合同示例
- 个人健身指导服务合同
- 小学心理健康教育学生情况分析
- 江苏省苏州市2023-2024学年高二年级上册期中语文试题(解析版)
- 记者的职业规划
- 厦门市2023-2024学年度第一学期高一年级质量检测数学试题参考答案与评分标准
- 社区专职网格员培训课件
- 人民调解员业务培训讲稿
- 2024年中考九年级语文专题复习现代文阅读(含答案)
- 小学数学学困生转化案例
- 结构设计通用规范(住建部2023年颁布)
- 职业生涯规划就业赛道个人
- 音乐教师职业生涯发展报告
评论
0/150
提交评论