版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、一.課題名稱:視屏播放器軟件設(shè)計及開發(fā)文檔PLAYER1:(基于ActiveMovie控件)1-三、需求分析與問題陳述:。設(shè)計動畫播放器,可以通過動畫控件播放動畫,用文件公用對話框打開AVI文件并播放,也可以通過鼠標左右鍵控制;播放時若用鼠標左鍵單擊畫面,可以暫停播放,若用右鍵單擊畫面,可以直接對畫面進行播放,暫停,停止等控制,可以設(shè)置全屏效果。1-四、設(shè)計目標與設(shè)計任務(wù):。一開始準備設(shè)計一個基于對話框的工程,并為這個對話框定義以下八個按鈕:OPEN 打開AVI文件PLAY 開始播放文件PAUSE 暫停播放STOP 停止播放FULLSCREEM 設(shè)置全屏EXIT 退出ADD 增加音量REDUC
2、E 減少音量(模型一效果圖)后來為與播放器2區(qū)別,使用菜單方式,將按鈕功能用菜單中的按鍵實現(xiàn)。(菜單)整體效果如下:其次,添加鼠標消息響應(yīng),實現(xiàn)單擊屏幕暫停(或繼續(xù))播放的功能。實現(xiàn)雙擊屏幕全屏(或恢復(fù)原始大?。┑墓δ?-五、解題算法思想:。向?qū)υ捒蛱砑覣ctiveMovie控件,并為其添加相應(yīng)的變量,利用其成員函數(shù)實現(xiàn)目標功能。主要代碼如下。1.實現(xiàn)播放文件的代碼:void CPlayerDlg:OnPlaystart() m_AMovie.Run(); SetTimer(0,20,NULL); /設(shè)置定時器2.實現(xiàn)播放暫停的代碼:void CPlayerDlg:OnPlaypause()
3、m_AMovie.stop(); 3.實現(xiàn)停止播放的代碼:void CPlayerDlg:OnPlaystop() m_AMovie.Stop(); KillTimer(0); /關(guān)掉定時器4.實現(xiàn)退出播放的代碼:void CPlayerDlg:OnFileexit() OnCancel();5.實現(xiàn)全屏的代碼: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.實現(xiàn)文件打開的代碼: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實現(xiàn)鼠標單擊屏幕暫停(或繼續(xù))播放的功能的代碼:void CPlayerDlg:OnClickAmovie() if(ispause=true)m_AMovie.Run(); ispause=false;else m_AMovie.Pause();ispause=true;8.實現(xiàn)鼠標雙擊屏幕全屏(或恢復(fù)原始大?。┑墓δ艿拇a: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.對于音量的調(diào)節(jié),我們并沒有采用按鈕或者按鍵的方式實現(xiàn)。我們使用了進度條控件。首先,我
8、們新增了一個對話框,在新對話框上插入一個進度條,并新增相應(yīng)的控件變量。通過移動進度條來改變動畫的聲音。主要代碼代碼如下:void CVolumeDlg:SetVolume(CActiveMovie3 *pAmovie) m_pAMovie=pAmovie;/ 如果未打開任何媒體文件,則音量調(diào)節(jié)不可用。ActiveMovie 控件的 / CurrentState 屬性返回控件的當(dāng)前狀態(tài),-1 表示未打開任何文件,此時彈出/ 出錯提示信息。 if (m_pAMovie->GetCurrentState()!=-1)DoModal(); else MessageBox("音頻設(shè)備尚未
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-六、數(shù)據(jù)結(jié)構(gòu)描述:。類中新增變量及其作用:1. m_AMovie,是與控件ActiveMovie相關(guān)的變量,通過處理該變量對播放器進行功能實現(xiàn)。2.
11、 m_pAMovie,是指向ActiveMovie類的指針變量,存在于音量控制對話框類里,用于兩個對話框之間消息的傳遞傳遞。3. m_sld,是與滑動條控件相關(guān)的變量。通過處理該變量實現(xiàn)音量的改變。PLAYER2:(基于windows media player控件)2-三、需求分析與問題陳述:。 設(shè)計多媒體播放器,主要通過windows media player控件實現(xiàn)該播放器的主要功能。界面以按鈕為主,并通過按鈕實現(xiàn)對播放文件的各項控制。主要有文件打開、播放、暫停、停止、全屏以及音量、播放模式和播放列表的操作。由于該軟件為多媒體播放器,所以程序需要要支持多種格式的文件。除此之外,還設(shè)置了Es
12、c熱鍵以實現(xiàn)退出全屏的快捷操作。2-四、設(shè)計目標與設(shè)計任務(wù):。一開始按照書上案例要求設(shè)計一個基于對話框的工程,并為這個對話框定義以下八個按鈕:OPEN 打開AVI文件PLAY 開始播放文件PAUSE 暫停播放STOP 停止播放FULLSCREEM 設(shè)置全屏EXIT 退出ADD 增加音量REDUCE 減少音量(圖1.模型1效果圖如下)在繼續(xù)設(shè)計的過程中,我們?yōu)閷崿F(xiàn)播放器功能的多樣化、人性化,又相繼增加了播放列表控件、播放列表操作組合空件和播放模式組合控件。而且將音量控制進行改善,不僅增加了靜音控制,還將音量控制改變?yōu)榭刂茥l形式,使得更為直觀。(圖2.模型二效果圖如下) 而后期在對播放器界面美化過
13、程中,相繼為播放器添加了背景圖片以及改變了對話框的圖標,還有稍微調(diào)整了按鈕的排布。最終播放器界面效果如下圖:其次,添加按鈕、鼠標、鍵盤消息響應(yīng),實現(xiàn)整體播放的功能。如:實現(xiàn)雙擊屏幕全屏(或恢復(fù)原始大?。┑墓δ埽籈sc鍵實現(xiàn)退出全屏功能等等。2-五.解題算法思想:。向?qū)υ捒蛱砑觲indows media player控件(如下圖),并為其添加相應(yīng)的變量 CWMPPlayer m_player,利用其成員函數(shù)實現(xiàn)目標功能。主要代碼如下:由于要對wmp播放器實現(xiàn)控制,還要添加其他三個成員變量: CWMPMedia m_media;CWMPSettings m_setting;CWMPControls
14、 m_control;所以還需要添加上述三個類的頭文件: / wmplayerDlg.h : header file / #include "wmpcontrols.h" #include "wmpsettings.h" #include "wmpplaylist.h"1.實現(xiàn)播放文件的代碼: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. 實現(xiàn)播放暫停的代碼:void CWmplayerDlg:Onpause() / TODO: Add your control notification handler code herem_control.pause(); 3.實現(xiàn)停止播放的代碼:void CWmplayerDlg:Onstop() / TODO: Add your control notification handler code hereKillTimer(0); m_control.stop();4.
17、 實現(xiàn)退出播放的代碼:運用默認對話框初始的取消按鈕,并對其屬性進行修改。進而實現(xiàn)退出播放器的功能。5. 實現(xiàn)全屏的代碼: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.實現(xiàn)文件打開的代碼: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. 實現(xiàn)播放器快進、快退功能的代碼: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. 實現(xiàn)播放器播放列表的代碼: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. 實現(xiàn)播放器播放模式的代碼: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. 實現(xiàn)播放器播放文件操作的代碼(以選中項上衣為例):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("列表內(nèi)沒有被選中項!"
33、); return; if(IndexInFieldList = 0) AfxMessageBox("已經(jīng)到了列表頭部!");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. 實現(xiàn)播放器播放熱鍵操作的代碼: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第七章 膳食營養(yǎng)指導(dǎo)與疾病預(yù)防課件
- 二年級數(shù)學(xué)(上)計算題專項練習(xí)匯編
- 2024年專業(yè)石材安裝服務(wù)協(xié)議模板
- 2024年度德邦速運協(xié)議條款明細
- 2024年環(huán)保型散裝水泥運輸協(xié)議條款
- 2024專用型物業(yè)居間服務(wù)協(xié)議范本
- 2024年土石方工程協(xié)議樣本詳解
- 2024常用勞務(wù)分包協(xié)議格式樣本
- 城市地下活動場地租賃協(xié)議2024年
- 城市路燈建設(shè)與維護專業(yè)承包協(xié)議樣本
- 期中測評試卷(1-4單元)(試題)-2024-2025學(xué)年人教版三年級數(shù)學(xué)上冊
- GB/T 15822.1-2024無損檢測磁粉檢測第1部分:總則
- 新質(zhì)生產(chǎn)力解讀課件
- 建筑工程專業(yè)英語unitPPT課件
- 學(xué)生對教師評價表(共8頁)
- 批發(fā)零售大個體 E204-3批發(fā)和零售業(yè)產(chǎn)業(yè)活動單位(個體經(jīng)營戶)商品銷售和庫存
- 異辛酸鈉合成工藝及建設(shè)項目
- 西電計組課程設(shè)計報告
- 汽車買賣合同工商示范文本
- SC鍍鋅鋼管緊定式連接施工工法(共12頁)
- 梅克爾憩室PPT參考幻燈片
評論
0/150
提交評論