版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
...wd......wd......wd...《C/C++課程設(shè)計(jì)》工程報(bào)告目錄1工程簡介11.1工程名稱11.2功能概述11.3開發(fā)人員及職責(zé)........................................................................................................12需求分析...............................................................................................................................12.1功能需求....................................................................................................................12.2性能需求....................................................................................................................23系統(tǒng)設(shè)計(jì)...............................................................................................................................33.1代碼設(shè)計(jì)....................................................................................................................33.2流程圖......................................................................................................................134系統(tǒng)實(shí)現(xiàn)及測試.................................................................................................................175工程總結(jié).............................................................................................................................205.1總體總結(jié)..................................................................................................................205.2個(gè)人總結(jié)..................................................................................................................211工程簡介1.1工程名稱 多媒體播放器1.2功能概述此款媒體播放器工程具有以下功能:〔1〕本地設(shè)定目錄中包含音頻文件的瀏覽和播放〔支持mp3格式〕?!?〕本地設(shè)定目錄中包含圖片文件的瀏覽〔支持bmp格式〕?!?〕本地設(shè)定目錄中包含視頻文件的瀏覽和播放(支持mp4格式)?!?〕最近播放列表功能,保存最近播放的10個(gè)文件,保存最近追加的10個(gè)文件。視頻,音頻,圖片是分開的,都有最近播放列表和最近追加列表。1.3開發(fā)人員及職責(zé)負(fù)責(zé)視頻模塊,以及最后的模塊整合,報(bào)告的編寫負(fù)責(zé)音頻模塊,報(bào)告的編寫負(fù)責(zé)圖片模塊,報(bào)告的編寫2需求分析2.1.功能需求本設(shè)計(jì)將要實(shí)現(xiàn)的是一個(gè)單機(jī)多媒體播放器,可以對音頻、視頻、圖片進(jìn)展查看。從其目標(biāo)功能及特點(diǎn)分析,將本軟件功能劃分如下:視頻播放器:可以翻開MP4格式的視頻文件。在本地文件夾中將MP4格式的視頻文件添加至播放列表,點(diǎn)擊播放,或雙擊列表里的所選工程,就可跳轉(zhuǎn)至視頻播放窗口。在播放窗口里,查看視頻時(shí),有“播放〞,“暫停〞,“停頓〞功能。播放中,還有“前進(jìn)〞,“后退〞功能,即快進(jìn)快退功能,以4秒為一個(gè)單位,這個(gè)單位也可以在代碼中進(jìn)展修改。在觀看視頻時(shí),還有“上一曲,下一曲〞功能,即查看之前添加在播放列表里的視頻項(xiàng)。同時(shí),也可以選擇播放模式“循環(huán),順序,隨機(jī)〞,該功能也是基于播放列表實(shí)現(xiàn)的。在右邊功能鍵里,還有音量調(diào)節(jié),靜音功能。除此以外 ,還可以進(jìn)展全屏瀏覽,按“ESC〞退出全屏。在主頁面,還有兩個(gè)數(shù)據(jù)框“最近追加工程〞和“最近播放工程〞,可以直觀地看到最近播放工程,且可以手動(dòng)清空所有工程。這兩個(gè)列表只按照時(shí)間,保存最近的工程,且最多保存10個(gè)。音頻播放器可以翻開MP3格式的音頻。在本地文件夾中將MP3格式的視頻文件添加至播放列表,點(diǎn)擊播放,或雙擊列表里的所選工程,就可跳轉(zhuǎn)至音頻播放窗口。并且,在主窗口,還有兩個(gè)數(shù)據(jù)框“最近追加工程〞和“最近播放工程〞,可以直觀地看到最近播放工程,且可以手動(dòng)清空所有工程。這兩個(gè)列表只按照時(shí)間,保存最近的工程,且最多保存10個(gè)?!泊颂帪樵摱嗝襟w公共窗口,功能一樣,下面的圖片瀏覽器也是一樣的。〕在播放窗口里,聽取音頻時(shí),有“播放〞,“暫停〞,“停頓〞功能。同樣也會(huì)有“前進(jìn),后退〞功能,“上一曲,下一曲〞功能,播放模式中的“循環(huán),順序,隨機(jī)〞,這些功能與上面所述的視頻播放器一樣。圖片瀏覽器可以翻開BMP格式的圖片。主窗口同視頻、音頻播放器一樣,在此不多贅述。在瀏覽圖片窗口中,會(huì)有“上一張,下一張〞功能鍵,可以在“播放列表,最近播放工程,最近追加工程〞任何一個(gè)列表中循環(huán),可以自由選擇。當(dāng)圖片瀏覽到所選列表的最后一張時(shí),會(huì)自動(dòng)循環(huán)至列表第一張。〔4〕在主窗口的中,在列表中已添加文件后,有兩種方式可以翻開文件。一是選中想要翻開的文件,點(diǎn)擊“播放文件〞按鈕,二是直接雙擊列表中的文件,便可進(jìn)入到相應(yīng)子窗口進(jìn)展查看。〔5〕當(dāng)單獨(dú)拿出exe文件運(yùn)行時(shí),會(huì)自動(dòng)在exe所在文件里創(chuàng)立9個(gè)文本文檔,分別存放三個(gè)模塊〔視頻,音頻,圖片〕的三個(gè)列表〔播放列表,最近播放工程,最近追加工程〕信息。2.2.性能需求〔1〕硬件平臺要求由于本軟件為單機(jī)軟件,不需進(jìn)展大量的數(shù)據(jù)讀寫和數(shù)據(jù)交換,故對系統(tǒng)硬件配置的要求并不高,只要能夠平穩(wěn)運(yùn)行Windows操作系統(tǒng)的硬件平臺,都能夠使用本軟件?!?〕軟件開發(fā)環(huán)境1. OS:MicrosoftWindowsXPSP22. Complier:VisualC++6.0,VisualStudio2005TeamSystem或更高版本3. MSDNLibrary3系統(tǒng)設(shè)計(jì)3.1.代碼設(shè)計(jì)〔1〕音頻、視頻模塊1.創(chuàng)立播放器對話框右擊Dialog,點(diǎn)擊插入,在彈出的對話框中點(diǎn)擊Dialog,再點(diǎn)擊新建。雙擊新建的得對話框的ID,彈出新建的對話框,刪除里面所有的控件。右擊,建設(shè)類向?qū)?,此時(shí)彈出Addingaclass對話框,點(diǎn)擊ok,輸入name為player,點(diǎn)擊確定后退出。再在對話框中右擊,選擇插入ActiveX控件,選擇WindowsMediaPlayer,之后在對話框中可以看到一個(gè)視頻控件。右擊,選擇屬性,在控制中將選擇模式改為None,在視頻控件中也就看不到一開就有的按鍵了。再次右擊視頻控件,選擇建設(shè)類向?qū)А|c(diǎn)擊MemberVariables,選擇視頻控件的ID〔默認(rèn)為ID_OCX1〕,點(diǎn)擊AddVariables。此時(shí)會(huì)彈出一個(gè)對話框。點(diǎn)擊確定后,彈出ComfirmClass對話框后,點(diǎn)擊OK。此時(shí)可以看到建設(shè)了很多個(gè)類。之后為添加成員變量。Name為m_play,Category為Control,VariableType為CWMPPlayer4.點(diǎn)擊確定之后可以看到下面的效果。2.控件與函數(shù)聲明全局變量CStringplayname,用于記錄播放地址;intntype用于記錄播放的類型;intnum1,num2,num1用于記錄播放的地址在播放列表中的位置,num2用于記錄播放列表中總的播放地址。構(gòu)建成員函數(shù)voidplayer::Onplay(CStringpname,intn,intm,intt){playname=pname;num1=n;num2=m;ntype=t;}將前臺所選擇播放的信息通過函數(shù)傳遞給播放器對話框中在對話框中放上以下幾個(gè)控件??丶蘒D標(biāo)題控件ID標(biāo)題PushButtonID_bofang播放PushButtonID_zanting暫停PushButtonID_tingzhi停頓PushButtonID_qianjing前進(jìn)PushButtonID_houtui后退PushButtonID_shangyiqu上一曲PushButtonID_xiayiqu下一曲PushButtonID_yinjia+PushButtonID_yinjiang-PushButtonID_jingyin靜音PushButtonID_quanping全屏GroupBoxIDC_static播放模式GroupBoxIDC_yinliangkongzhi音量控制RadioButtonIDC_XUNHUAN循環(huán)RadioButtonIDC_shunxu順序RadioButtonIDC_suiji隨機(jī)TextIDC_static時(shí)間進(jìn)度TextID_timeStaticTextIDC_volumeStatic滑塊IDC_SLIDER1控件排列如下并建設(shè)如下三個(gè)變量添加全局變量inthour,minute,second;右擊對話框,建設(shè)類向?qū)?,在Messages中選擇WM_INITDIALOG,點(diǎn)擊ADDFunction,再點(diǎn)擊EditCode在BOOLplayer::OnInitDialog()函數(shù)中寫入hour=0; minute=0; second=0; UpdateData(true); m_time.Format("%d:%d:%d",hour,minute,second); UpdateData(false);讓時(shí)間進(jìn)度一開場為0;同樣的方法添加成員函數(shù)voidplayer::OnTimer(UINTnIDEvent)讓時(shí)間進(jìn)度能隨著播放的音視頻的進(jìn)度而走。添加成員函數(shù)voidplayer::OnDestroy(){ KillTimer(0); CDialog::OnDestroy(); //TODO:Addyourmessagehandlercodehere}在退出播放器對話框時(shí),讓計(jì)數(shù)器停頓。添加全局變量BOOLqian=false;假設(shè)qian為true時(shí),表示點(diǎn)擊了前進(jìn)或后退,此時(shí)點(diǎn)擊播放時(shí),繼續(xù)播放。雙擊播放,點(diǎn)擊確定,添加以下成員函數(shù)voidplayer::Onbofang(){ if(!qian) { m_play.SetUrl(playname);KillTimer(0); hour=minute=second=0; UpdateData(true); m_time.Format("%d:%d:%d",hour,minute,second); UpdateData(false);SetTimer(0,500,NULL); } else { m_play.GetControls().play();qian=false;}}點(diǎn)擊播放時(shí),也開場啟動(dòng)計(jì)時(shí)器同理,前進(jìn)的成員函數(shù)voidplayer::Onqianjing()后退的成員函數(shù)voidplayer::Onhoutui()停頓得成員函數(shù)voidplayer::Ontingzhi()停頓時(shí),時(shí)間進(jìn)度變?yōu)?,同時(shí)計(jì)數(shù)器停頓。暫停的成員函數(shù)voidplayer::Onzanting(){CStringstrtemp;GetDlgItemText(ID_zanting,strtemp);if(strtemp.Compare("暫停")==0){ m_play.GetControls().pause();SetDlgItemText(ID_zanting,"繼續(xù)");KillTimer(0);}if(strtemp.Compare("繼續(xù)")==0){m_play.GetControls().play();SetDlgItemText(ID_zanting,"暫停");SetTimer(0,500,NULL);}}點(diǎn)擊暫停時(shí),顯示繼續(xù),此時(shí)計(jì)數(shù)器停頓。當(dāng)點(diǎn)擊繼續(xù)時(shí),計(jì)數(shù)器又開場運(yùn)行,同時(shí)顯示出暫停。定義成員變量intshape=2;默認(rèn)值為2,表示默認(rèn)順序播放。在循環(huán),順序,隨機(jī)播放函數(shù)中,分別將shape賦值為1,2,3;創(chuàng)立成員函數(shù)voidplayer::shunxubofang(){CStdioFile*fsp; if(ntype==3){fsp=newCStdioFile(".\\list.txt",CFile::modeRead);}elseif(ntype==1){fsp=newCStdioFile(".\\list1.txt",CFile::modeRead);}elseif(ntype==4){fsp=newCStdioFile(".\\list21.txt",CFile::modeRead);}elseif(ntype==5){fsp=newCStdioFile(".\\list22.txt",CFile::modeRead);}elseif(ntype==6) {fsp=newCStdioFile(".\\list31.txt",CFile::modeRead);}elseif(ntype==7){fsp=newCStdioFile(".\\list32.txt",CFile::modeRead);} CStringstr; if(num1==0) {num1=num2;} for(inti=0;i<=num1-1;i++) { fsp->ReadString(str);} playname=str; fsp->Close(); deletefsp; m_play.SetUrl(playname); num1--;}此函數(shù)用于上一曲的順序播放。根據(jù)媒體類型與播放列表的不同,而選擇翻開的文件不同。假設(shè)選擇的是第一曲,上一曲為最后一曲。下一曲的順序播放函數(shù)與上面類似,不過假設(shè)選中為最后一曲時(shí),則下一曲為第一曲。與上面的函數(shù)不同在于 if(num1==num2-1) {num1=0;} else num1++; for(inti=0;i<=num1;i++) { fsp->ReadString(str);} playname=str; fsp->Close(); deletefsp; m_play.SetUrl(playname);隨機(jī)播放為在0到總地址數(shù)之間隨機(jī)生成一個(gè)數(shù),然后播放次數(shù)字所對應(yīng)的音視屏。與上面的函數(shù)不同在于srand(time(0)); inttemp=rand()%num2;上一曲的函數(shù)oidplayer::Onxiayiqu(){ //TODO:Addyourcontrolnotificationhandlercodehere]if(shape==1) { m_play.SetUrl(playname);}elseif(shape==2){ shunxubofang();}elseif(shape==3){suijibofang();}SetTimer(0,500,NULL);}根據(jù)shape的不同,所選擇的函數(shù)也就不同。在下一曲的函數(shù)中,與上面不同的是,當(dāng)shape為2時(shí),所調(diào)用的函數(shù)為shunxubofang2();構(gòu)建成員函數(shù)voidplayer::nowvolume(){UpdateData(true);m_volume.Format("%d",m_silder.GetPos());UpdateData(false);}使聲音滑塊所對應(yīng)的數(shù)字呈現(xiàn)在靜態(tài)文本框中。同時(shí)在OnInitDialog()中參加 m_silder.SetRange(0,100);m_silder.SetPos(50); nowvolume();定義滑塊的長度為100,剛開場時(shí)是50。音減的函數(shù)中voidplayer::Onyinjiang(){ //TODO:Addyourcontrolnotificationhandlercodehere longvolume=m_play.GetSettings().GetVolume()-10; m_play.GetSettings().SetVolume(volume);m_silder.SetPos(volume);nowvolume();}每次點(diǎn)擊-,就將聲音減10。音加只要將減10改為加10即可。同時(shí)在音加函數(shù)中參加SetDlgItemText(IDC_jingyin,"靜音");當(dāng)處于靜音時(shí),點(diǎn)擊+,可將“有聲〞改為“靜音〞。同時(shí)為音量滑塊建設(shè)類向?qū)?,添加如下函?shù)voidplayer::OnReleasedcaptureSlider1(NMHDR*pNMHDR,LRESULT*pResult){ //TODO:Addyourcontrolnotificationhandlercodeherem_play.GetSettings().SetVolume(m_silder.GetPos()); nowvolume(); *pResult=0;}使其能夠拖動(dòng)滑塊來改變音量大小。雙擊靜音后,添加函數(shù)voidplayer::Onjingyin(){ //TODO:Addyourcontrolnotificationhandlercodehere CStringstrtemp;GetDlgItemText(IDC_jingyin,strtemp);if(strtemp.Compare("靜音")==0){m_play.GetSettings().SetVolume(0);m_silder.SetPos(0);SetDlgItemText(IDC_jingyin,"有聲");}if(strtemp.Compare("有聲")==0){m_play.GetSettings().SetVolume(30);m_silder.SetPos(50);SetDlgItemText(IDC_jingyin,"靜音");}nowvolume();}當(dāng)點(diǎn)擊靜音時(shí),聲音變?yōu)?,此時(shí)文字變?yōu)椤坝新暔?,?dāng)點(diǎn)擊“有聲〞時(shí),聲音變?yōu)?0,此時(shí)文字為“靜音〞。添加全局變量boolquan=false;當(dāng)其為true時(shí),為全屏顯示,默認(rèn)為false。雙擊全屏,添加成員函數(shù)voidplayer::Onquanping(){ m_play.SetFullScreen(TRUE); quan=true;}此時(shí)全屏顯示,quan值為true;右擊視頻控件,建設(shè)類向?qū)?Messages中選擇DoubleClick,編輯函數(shù),寫入 if(!quan) { m_play.SetFullScreen(TRUE); quan=true; }else { m_play.SetFullScreen(FALSE); quan=false;}}根據(jù)quan的值,雙擊之后,來決定是全屏還是退出全屏。圖片模塊新建對話框,建發(fā)與視頻播放器的一樣。在對話框中引入三個(gè)控件,一個(gè)圖像的,ID設(shè)為ID_showing,,類型為位圖,在樣式中選擇凹陷,圖像居中,真實(shí)圖像大小。兩個(gè)Button,一個(gè)為上一張,一個(gè)為下一張。建設(shè)類向?qū)В椒ㄅc播放器一樣,類名為photo.構(gòu)建函數(shù)voidphoto::getname(CStringpn,intnum1,intnum2,intnt){m_path=pn;now=num1;sum=num2;type=nt;}將前臺數(shù)據(jù)傳給后臺全局變量m_path為播放地址,now為播放地址序列,sum為總播放數(shù)量,type為播放列表的類型。創(chuàng)立函數(shù)voidphoto::showpic(){hwnd=GetDlgItem(IDC_showing);hDesDC=hwnd->GetDC()->m_hDC;hSrcDC=CreateCompatibleDC(hDesDC);hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);GetObject(hBitmap,sizeof(BITMAP),&bm);SelectObject(hSrcDC,hBitmap);hwnd->GetClientRect(&rect);::SetStretchBltMode(hDesDC,COLORONCOLOR);::StretchBlt(hDesDC,rect.left,rect.top,rect.right,rect.bottom,hSrcDC,0,0,bm.bmWidth,bm.bmHeight,+SRCCOPY);UpdateData(false);}此函數(shù)為將圖像在圖像控件中顯示。接下來進(jìn)展在OnPaint()函數(shù)中畫圖。由于此類中沒有該函數(shù),可通過建設(shè)類向?qū)А?〕主窗口模塊翻開VC6++,新建工程。選擇MFCAppWizard(exe),在工程名字中填入media1,如以下列圖點(diǎn)擊確定。選擇創(chuàng)立類型為根本對話框。一直點(diǎn)擊確定。最后翻開對話框,刪除里面所有的控件。右擊media1resources,點(diǎn)擊插入,選擇新建Meun,翻開Meun菜單,新建三個(gè)主菜單:應(yīng)用程序,媒體類型,目錄設(shè)定。建設(shè)次菜單如以下列圖所示主菜單次菜單ID次菜單標(biāo)明應(yīng)用程序ID_tuichu退出媒體類型ID_yinyue音樂媒體類型ID_tupian圖片媒體類型ID_shipin視頻目錄設(shè)定ID_mulu設(shè)定監(jiān)視目錄在media1Dlg.cpp中頭文件下參加CMenum_Menu;并在BOOLCMedia1Dlg::OnInitDialog()函數(shù)中參加m_Menu.LoadMenu(IDR_MENU1);SetMenu(&m_Menu);這樣就可以菜單嵌入該對話框中。建設(shè)全局函數(shù)inttype=1,默認(rèn)值為1。翻開新建的菜單,右擊應(yīng)用程序下的退出,建設(shè)類向?qū)?,在Messages中選擇COMMAND,再點(diǎn)擊AddFunction。再點(diǎn)擊EditCode,翻開函數(shù)Ontuichu(),里面寫入CDialog::OnCancel();運(yùn)行程序后,點(diǎn)擊推出時(shí),可退出次對話框。同樣的方法為音樂,圖片和視頻建設(shè)類向?qū)?,翻開函數(shù),分別將type復(fù)制為1,2,3;為了選中不同類型后,能夠在選項(xiàng)前面打勾。則需要建設(shè)類向?qū)Вx擇UPDATA_COMMAND_UI點(diǎn)擊確定之后,在音樂函數(shù)中寫入 pCmdUI->SetCheck(type==1||type==4||type==5);,當(dāng)type為1或4或5時(shí)音樂前面打勾.同理圖片所對應(yīng)的type為2或8或9,視頻的type為3或6或7.擔(dān)當(dāng)運(yùn)行時(shí),還不能出現(xiàn)上述現(xiàn)象。因?yàn)榇撕瘮?shù)是菜單所有的,根本對話框中不包含函數(shù),這是就需要借助菜單中的函數(shù)。在Cmedia1aDlg類中聲明成員函數(shù)OnInitMenuPopup(CMenu*pPopupMenu,UINTnIndex,BOOLbSysMenu),接著直接將函數(shù)copy給此類中。將函數(shù)參加后,運(yùn)行后,點(diǎn)擊不同類型的媒體后,會(huì)看到前面打勾。在對話框的函數(shù)中建設(shè)全局變量boolmulu=true;默認(rèn)值為true,表示顯示播放列表。接下來在設(shè)定監(jiān)視目錄中,與前面同樣的方法,建設(shè)類向?qū)?,選擇兩個(gè)函數(shù),此函數(shù)與音樂的函數(shù)一樣,如下voidCMedia1Dlg::Onmulu(){ if(mulu) { m_list.ShowWindow(SW_HIDE); mulu=false; } else { m_list.ShowWindow(SW_SHOW); mulu=true;}}voidCMedia1Dlg::OnUpdatemulu(CCmdUI*pCmdUI){ //TODO:AddyourcommandupdateUIhandlercodehere pCmdUI->SetCheck(mulu);}默認(rèn)時(shí),此菜單前面打勾,播放列表顯示。當(dāng)打擊后,true為false,前面不打勾,播放列表不顯示。再次點(diǎn)擊時(shí),mulu有變?yōu)閠rue.〔m_list為播放列表的變量,之后會(huì)聲明〕。菜單建好后,接下來就時(shí)對話框的界面了。在主菜單中選入三個(gè)Button4,Button5,Button6,,ID分別要與菜單中音樂,圖片,視頻的ID要一樣。為了點(diǎn)擊時(shí)與點(diǎn)擊所對應(yīng)的菜單一樣。并將這三個(gè)Button屬性中的樣式中點(diǎn)擊所有者繪圖。在右邊的資源框中右擊Bitmap,在此文件夾中插入三張圖片,圖片的格式必須為bmp,接下來就是將圖片嵌入這三個(gè)button中。對話框的函數(shù)中頭文件下聲明三個(gè)CBitmapButton變量,為m_btnX1,m_btnX2,m_btnX3;在BOOLCMedia1Dlg::OnInitDialog()函數(shù)中寫入m_btnX1.LoadBitmaps(IDB_BITMAP2);m_btnX1.SubclassDlgItem(ID_yinyue,this);m_btnX1.SizeToContent();m_btnX2.LoadBitmaps(IDB_BITMAP1);m_btnX2.SubclassDlgItem(ID_tupian,this);m_btnX2.SizeToContent();m_btnX3.LoadBitmaps(IDB_BITMAP3);m_btnX3.SubclassDlgItem(ID_shipin,this);m_btnX3.SizeToContent();每一個(gè)CBitmapButton變量與button所對應(yīng)起來。SizeToContent();是為了將Button的大小與圖片的大小想適應(yīng)。運(yùn)行后,結(jié)果如圖。在對畫框中引入四個(gè)組合框,標(biāo)題分別為播放列表,最進(jìn)播放列表,最近追加工程,最近播放工程。分別在播放列表,最近追加工程,最近播放工程中參加一個(gè)列表框。排列如以下列圖ID從左往右依次為ID_list2,ID_bofang,ID_zuijia,并在屬性中選擇水平滾動(dòng)及垂直滾動(dòng)。右擊ID_list2,點(diǎn)擊建議類向?qū)Вx擇添加成員變量,類型為CListBox,名字為m_list。同理,也為其他兩個(gè)列表框建設(shè)兩個(gè)成員變量,依次為m_zuibo,m_zuija,類型一樣。接下來在CMedia1Dlg::OnInitDialog()函數(shù)中寫入 m_list.SetHorizontalExtent(1000); m_zuijia.SetHorizontalExtent(1000); m_zuibo.SetHorizontalExtent(1000)這是由于水平滑條不靈敏,以此當(dāng)運(yùn)行時(shí)可以看到水平滑條。垂直滑條得數(shù)量到達(dá)列表的容量時(shí)可以看到。構(gòu)架成員函數(shù)voidCMedia1Dlg::dakaiwenjian()此函數(shù)是為了將九個(gè)文件中的數(shù)據(jù)根據(jù)媒體類型的不同,讀入所對應(yīng)的列表框中。如果這九個(gè)文件不存在,則自動(dòng)創(chuàng)立。文件與所對應(yīng)的列表如以下列圖文件列表文件列表lixt.txt視頻播放列表List22.txt最近播放音頻Lixt31.txt最近添加視頻List41.txt圖片播放列表Lixt32.txt最近播放視頻List42.txt最近添加圖片List1.txt音頻播放列表List43.txt最近播放圖片List21.txt最近添加音頻在CMedia1Dlg::OnInitDialog()函數(shù)中調(diào)用此函數(shù),當(dāng)開場運(yùn)行此函數(shù)時(shí),開場讀取文件,默認(rèn)是音頻。在對話框中雙擊Button4,翻開函數(shù),寫入m_list.ResetContent();m_zuijia.ResetContent();m_zuibo.ResetContent(); dakaiwenjian();首先是去除三個(gè)列表框中的內(nèi)容,然后又翻開文件,從新讀取新的內(nèi)容。Button5與Button6與之一樣。接下來開場為三個(gè)列表添加內(nèi)容了。添加一個(gè)Button,名字為添加文件。雙擊,翻開函數(shù), if(type==3||type==6||type==7){charszFileFilter[]= "MedalFile(*.avi,*.wmv,*.asf)|*.avi;*.wmv;*.asf|""RMVBFile(*.rmvb)|*.rmvb|""MP4File(*.mp4)|*.mp4|""MkvFile(*.mkv)|*.mkv|""AllFile(*.*)|*.*||"; CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_ALLOWMULTISELECT,szFileFilter); POSITIONpos=dlg.GetStartPosition();if(dlg.DoModal()==IDOK){while(pos!=NULL) {m_pathname=dlg.GetNextPathName(pos); for(inti=0;i<m_list.GetCount();i++) { CStringstrtemp;m_list.GetText(i,strtemp); if(m_pathname==strtemp) {MessageBox("該文件已存在"); break;} }if(m_zuijia.GetCount()==10) { m_zuijia.DeleteString(0);} if(i==m_list.GetCount()) { m_list.AddString(m_pathname);m_zuijia.AddString(m_pathname); } }}}此函數(shù)是翻開視頻文件,并將其參加播放列表中,同時(shí)還有一個(gè)判斷是否已存在的if語句,假設(shè)存在,則不添加。添加的地址也會(huì)導(dǎo)入最近添加的工程中,假設(shè)超過十個(gè),則將第一個(gè)刪掉。列表框中的排列為時(shí)間先后順序。3,6,7代表視頻文件,只是所對應(yīng)的列表不同。音頻與圖片與之類似,1,4,5代表音頻,2,8,9代表圖片。函數(shù)的隨后還要調(diào)用保存函數(shù)。視頻的保存函數(shù)為elseif(type==3||type==6||type==7) {ofstreamfile,file1;file.open(".\\list.txt");file1.open(".\\list31.txt");for(inti=0;i<m_list.GetCount();i++){ CStringstrtemp;m_list.GetText(i,strtemp); strtemp+="\n"; file<<strtemp;}for(i=0;i<m_zuijia.GetCount();i++){ CStringstrtemp;m_zuijia.GetText(i,strtemp); strtemp+="\n"; file1<<strtemp;}file1.close();file.close(); }用此文件函數(shù),還需要添加頭文件#include“fstream.h〞.音樂與圖片與之一樣,只是所保存的文件不同。接下來是保存最近播列表。創(chuàng)立成員函數(shù)voidCMedia1Dlg::zuibobaocun(){ofstreamfile2;if(type==1||type==4||type==5){file2.open(".\\list22.txt");}elseif(type==3||type==6||type==7){file2.open(".\\list32.txt");}elseif(type==2||type==8||type==9){file2.open(".\\list43.txt");}for(inti=0;i<m_zuibo.GetCount();i++){ CStringstrtemp;m_zuibo.GetText(i,strtemp); strtemp+="\n"; file2<<strtemp;}根據(jù)媒體類型不同,保存在三個(gè)不同的文件中。創(chuàng)立最近播放函數(shù)voidCMedia1Dlg::tianjia(){CStringstr;for(inti=0;i<m_zuibo.GetCount();i++){ m_zuibo.GetText(i,str); if(str==m_pathname) break;}if(i==m_zuibo.GetCount()){if(m_zuibo.GetCount()==10) {m_zuibo.DeleteString(0);} m_zuibo.AddString(m_pathname); zuibobaocun();}其效果與其他兩個(gè)列表保存函數(shù)一樣。從新引入四個(gè)按鍵,分別為刪除文件,清空最近播放列表,清空最近添加工程,和播放文件。雙擊清空最近是,添加函數(shù) m_zuibo.ResetContent(); zuibobaocun();清空最近播放列表。清空最近添加工程與之相似。刪除文件按鈕是刪除播放列表中的所選擇的文件。函數(shù)為m_list.DeleteString(m_list.GetCurSel());Onbaocunwenjian();最后就是播放了。播放分單擊和雙擊。拿播放列表來說,先雙擊播放列表,創(chuàng)立函數(shù)voidCMedia1Dlg::OnSelchangeList2(){ //TODO:Addyourcontrolnotificationhandlercodehere select=true; CStringstr;num=m_list.GetCurSel(); m_list.GetText(num,str); m_pathname=str; count=m_list.GetCount();} select為全局變量,其為true時(shí),表示以選中工程。Num表示所選中的地址的所對應(yīng)的數(shù)字,count為總地址數(shù)。所中之后再點(diǎn)擊播放文件按鈕,其函數(shù)為voidCMedia1Dlg::Onbofang(){ //TODO:Addyourcontrolnotificationhandlercodehere if(select) { if(type!=2&&type!=8&&type!=9) {tianjia();playerplay;play.Onplay(m_pathname,num,count,type);play.DoModal(); } else { tianjia(); photoph; ph.getname(m_pathname,num,count,type); ph.DoModal();} } else {MessageBox("還沒有選擇播放文件");}}先調(diào)用添加函數(shù),將播放的地址參加最近播放列表中。接下來根據(jù)type的不同翻開的對話框不同,通過函數(shù)傳遞播放地址,播放類型,以及當(dāng)前順序和總數(shù)量。接下來是雙擊。右擊播放列表,建設(shè)類想到,點(diǎn)擊LBN_DBLCLK,添加函數(shù)voidCMedia1Dlg::OnDblclkList2(){ //TODO:Addyourcontrolnotificationhandlercodehere if(type!=2&&type!=8&&type!=9) { CStringstr; num=m_list.GetCurSel(); m_list.GetText(num,str); m_pathname=str;playerplay;play.Onplay(m_pathname,num,m_list.GetCount(),type);tianjia();play.DoModal();} else { CStringstr; num=m_list.GetCurSel(); m_list.GetText(num,str); m_pathname=str;photopp;pp.getname(m_pathname,num,m_list.GetCount(),type);tianjia();pp.DoModal(); }}此函數(shù)為以上兩個(gè)函數(shù)的合體。其他兩個(gè)列表單擊雙擊播放與之相似,只是需要在里面從根據(jù)原先的type為復(fù)制。Type的是與列表對應(yīng)的關(guān)系如下1音樂播放列表2圖片播放列表3視頻播放列表4最近添加音樂5最近播放音樂6最近添加視頻7最近播放視頻8最近添加圖片9最近播放圖片3.2.流程圖圖片瀏覽器圖片上一張下一張4系統(tǒng)實(shí)現(xiàn)及測試播放器主界面播放音頻播放視頻圖片瀏覽5工程總結(jié)5.1總體總結(jié)對于這個(gè)多媒體播放器的工程,可以說我們
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿(mào)大學(xué)南國商學(xué)院《理化檢測下》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東輕工職業(yè)技術(shù)學(xué)院《景觀設(shè)計(jì)快題》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東農(nóng)工商職業(yè)技術(shù)學(xué)院《行政管理專業(yè)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東梅州職業(yè)技術(shù)學(xué)院《影視編劇》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名幼兒師范專科學(xué)?!禞SP程序設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 四年級數(shù)學(xué)(四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案
- 國學(xué)智慧(東北師范大學(xué))學(xué)習(xí)通測試及答案
- 2025新北師大版英語七年級下單詞表
- 【名師一號】2020-2021學(xué)年新課標(biāo)版物理選修3-1-第二章恒定電流-測試
- 【名師一號】2020-2021學(xué)年高中英語北師大版必修4-隨堂演練-第十二單元綜合測評
- 少兒美術(shù)課件-《我的情緒小怪獸》
- 永續(xù)債計(jì)入權(quán)益的必備條件分析
- 預(yù)應(yīng)力鋼絞線張拉伸長量計(jì)算程序單端(自動(dòng)版)
- 2022年一級造價(jià)工程師《計(jì)價(jià)》章節(jié)題及答案
- 基坑監(jiān)測課件ppt版(共155頁)
- Q∕GDW 12075-2020 架空輸電線路防鳥裝置技術(shù)規(guī)范
- 蠕變、應(yīng)力松弛、滯后和內(nèi)耗講解
- 開發(fā)區(qū)開發(fā)管理模式及發(fā)展要素PPT課件
- 急診科科主任述職報(bào)告范文
- 基于MATLAB語音信號降噪處理
- 試訓(xùn)運(yùn)動(dòng)員協(xié)議書
評論
0/150
提交評論