![音樂播放器課設(shè)報(bào)告_第1頁](http://file4.renrendoc.com/view/a885c03e6f4c97d431ce7c644fa0d4ac/a885c03e6f4c97d431ce7c644fa0d4ac1.gif)
![音樂播放器課設(shè)報(bào)告_第2頁](http://file4.renrendoc.com/view/a885c03e6f4c97d431ce7c644fa0d4ac/a885c03e6f4c97d431ce7c644fa0d4ac2.gif)
![音樂播放器課設(shè)報(bào)告_第3頁](http://file4.renrendoc.com/view/a885c03e6f4c97d431ce7c644fa0d4ac/a885c03e6f4c97d431ce7c644fa0d4ac3.gif)
![音樂播放器課設(shè)報(bào)告_第4頁](http://file4.renrendoc.com/view/a885c03e6f4c97d431ce7c644fa0d4ac/a885c03e6f4c97d431ce7c644fa0d4ac4.gif)
![音樂播放器課設(shè)報(bào)告_第5頁](http://file4.renrendoc.com/view/a885c03e6f4c97d431ce7c644fa0d4ac/a885c03e6f4c97d431ce7c644fa0d4ac5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
音樂播放器音樂播放器1問題定義和可行性研究 2(1)問題定義 3(2)可行性研究 32需求分析 31功能需求 31.1功能描述 32性能需求 43將來可能提出的要求 44項(xiàng)目描述 54.1編寫目的 54.2項(xiàng)目背景 54.3開發(fā)工具及環(huán)境簡介 63概要設(shè)計(jì)和詳細(xì)設(shè)計(jì) 63.1概要設(shè)計(jì) 63.2詳細(xì)設(shè)計(jì) 73.3音樂編碼設(shè)計(jì) 85主界面界面介紹 96系統(tǒng)的實(shí)現(xiàn) 11一、主要的對(duì)話框 11二、全局變量 12三、初始化函數(shù) 12三、播放、暫停功能 15四、添加文件到播放列表 18五、下一首\上一首 20六、停止播放 21七、播放模式 21八、顯示時(shí)間和播放進(jìn)度 22九、刪除歌曲 235.2單元測(cè)試 256.總結(jié) 261問題定義和可行性研究本章分為兩部分,問題定義和可行性研究。問題定義階段主要研究我們所學(xué)的知識(shí)能做什么項(xiàng)目,而可行性研究給出了制作音樂播放器的可行性。(1)問題定義通過開發(fā)音樂播放器,來練習(xí)本學(xué)期軟件工程課程所學(xué)知識(shí)。熟悉軟件開發(fā)的各個(gè)階段,將書本上的知識(shí)與實(shí)踐性的開發(fā)活動(dòng)聯(lián)系起來。實(shí)現(xiàn)音樂播放器基本的功能。(2)可行性研究大一的時(shí)候已經(jīng)學(xué)過了基本的C++編程的知識(shí),在這個(gè)基礎(chǔ)上,有三個(gè)星期的時(shí)間來學(xué)習(xí)MFC編程,學(xué)習(xí)文件的讀寫操作,以及系統(tǒng)API函數(shù)調(diào)用等知識(shí)。邊學(xué)邊用,具備開發(fā)軟件的能力。2需求分析本章給出了音樂播放器應(yīng)該具備的功能,并給出了功能示意圖,最后提出了實(shí)現(xiàn)該播放器應(yīng)該具備的條件。1功能需求1.1功能描述本播放器主要有如下功能:1.對(duì)文件進(jìn)行操作。2.對(duì)按鈕的處理1.對(duì)文件的操作通過文件的讀寫知識(shí),實(shí)現(xiàn)瀏覽目錄以選擇文件,添加歌曲到播放列表,刪除播放列表中的歌曲,對(duì)已經(jīng)選中的文件進(jìn)行播放、暫停,以及通過雙擊播放列表中的歌曲來播放文件。2.對(duì)控件的處理對(duì)各種按鈕添加了事件響應(yīng)函數(shù),可以處理基本的播放,暫停,上一首/下一首,刪除,選擇播放模式等操作。功能如下圖:2性能需求本項(xiàng)目是一個(gè)普通的音樂播放器,運(yùn)行環(huán)境為VS2010,項(xiàng)目運(yùn)行速率正常,可以滿足用戶需求。時(shí)間性能要求:越低越好。便捷性:運(yùn)用了可視化編程,更有助于人機(jī)交互,更人性化。程序的運(yùn)行,符合正常的操作習(xí)慣,程序功能明了簡潔!3將來可能提出的要求(1)歌曲列表的保存(2)菜單操作(3)更換背景圖片(4)提供網(wǎng)絡(luò)下載功能:支持通過歌名和歌手名進(jìn)行歌曲檢索和下載功能;
(5)支持歌詞顯示和同步播放;(6)支持歌曲在線播放;
(7)支持更友好的歌曲檢索和下載功能;(8)提供更良好的操作界面。
4項(xiàng)目描述
4.1編寫目的
設(shè)計(jì)一個(gè)基于windows平臺(tái)的音樂點(diǎn)播系統(tǒng),實(shí)現(xiàn)音樂庫的管理以及播放功能。
音樂播放器能夠滿足音樂的播放功能,實(shí)現(xiàn)一款播放器的基本功能。4.2項(xiàng)目背景
本項(xiàng)目作為《軟件課程設(shè)計(jì)》課程的訓(xùn)練項(xiàng)目提出,在基本的設(shè)計(jì)實(shí)現(xiàn)基礎(chǔ)上,將不斷對(duì)已有的設(shè)計(jì)進(jìn)行進(jìn)一步的修改和完善,最終完成整個(gè)軟件開發(fā)過程。本次項(xiàng)目的旨在通過不同軟件工程設(shè)計(jì)方法與技術(shù)的實(shí)踐,了解和掌握各種技術(shù)、工具平臺(tái)的特點(diǎn)與局限性,體會(huì)協(xié)同開發(fā)方式。
第1階段:主要目的是通過對(duì)項(xiàng)目需求的分析和理解,通過面向?qū)ο蟮脑O(shè)計(jì)方式完成項(xiàng)目前期的準(zhǔn)備工作。
第2階段:我們會(huì)根據(jù)既定需求,完善設(shè)計(jì)模式。
第3階段:在設(shè)計(jì)文檔和需求分析的文檔下,完成音樂點(diǎn)播系統(tǒng)原型的開發(fā),并完成整個(gè)開發(fā)流程的測(cè)試報(bào)告
第4階段:通過音樂點(diǎn)播系統(tǒng)軟件的設(shè)計(jì)開發(fā),了解軟件文檔的編寫原則,訓(xùn)練掌握軟件各類文檔寫作的技巧,同時(shí)在文檔的編寫過程中提高和增加C++開發(fā)的能力和經(jīng)驗(yàn)。
4.3開發(fā)工具及環(huán)境簡介
操作系統(tǒng):windows
xp或以上版本
C++6.0:VisualC++是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。Microsoft
Office
Word
2003:經(jīng)典辦公軟件,本項(xiàng)目中用于編寫文檔。3概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)3.1概要設(shè)計(jì)通過這個(gè)階段的工作將劃分出組成系統(tǒng)的物理元素——程序,文件和文檔等,但是每個(gè)物理元素仍然處于黑盒子級(jí),這些黑盒子里的具體內(nèi)容將在以后仔細(xì)設(shè)計(jì)??傮w設(shè)計(jì)的另一項(xiàng)重要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu),也就是要確定該軟件由哪些模塊組成的,以及這些模塊之間的關(guān)系。運(yùn)用傳統(tǒng)軟件工程方法學(xué)的知識(shí)將音樂播放器軟件的開發(fā)分成:一、MFC的使用以及實(shí)現(xiàn)方法二、文件的讀寫操作三、系統(tǒng)API函數(shù)的調(diào)用3.2詳細(xì)設(shè)計(jì)根據(jù)概要設(shè)計(jì)所劃分的四個(gè)模塊,該階段應(yīng)詳細(xì)地完成這四個(gè)模塊的任務(wù):一、MFC的實(shí)現(xiàn)通過MFC窗口以及函數(shù)的使用,創(chuàng)建出播放器的主界面,主界面應(yīng)包括文件的打開、添加、播放以及線程按鍵。另外,還要各種函數(shù)應(yīng)該實(shí)現(xiàn)相應(yīng)組件上的各種事件。二、文件讀寫操作的實(shí)現(xiàn)通過以前的學(xué)過的文件讀寫操作知識(shí),實(shí)現(xiàn)對(duì)音樂文件的讀以及寫操作。三、系統(tǒng)API函數(shù)的調(diào)用通過調(diào)用系統(tǒng)媒體控制接口函數(shù)實(shí)現(xiàn)對(duì)mp3,wav,wma等格式的音樂的播放的功能。3.3音樂編碼設(shè)計(jì)
一、編碼原理
1.
音樂的十二平均率規(guī)定
(1)
每兩個(gè)八度音之間的頻率相差一倍。
(2)
兩個(gè)八度音之間又可以分為十二個(gè)伴音,每兩個(gè)伴音的頻率比為1.059463。
(3)
低音6(音名A)的頻率是440Hz,音名B到C之間、E到F之間為伴音,其余為全音。
2.
樂譜編碼
選取65536Hz為基準(zhǔn)頻率,以此頻率分頻得到簡譜高音各音調(diào)的分頻比。計(jì)算公式為N=65536/f。
二、編碼參照
為了讓ROM能夠識(shí)別各音頻的分頻系數(shù),需將個(gè)音頻分頻系數(shù)按照一定格式轉(zhuǎn)換成十六進(jìn)制格式。我們采用8位的ROM,D6D5位表示高中低音,如表1-2所示,11為高音,10為中音,01為低音;用D4D3D2D1D0位表示分頻系數(shù),將表1-1的分頻系數(shù)轉(zhuǎn)換成二進(jìn)制格式表示;ROM的高位全部補(bǔ)0。然后轉(zhuǎn)換成十六進(jìn)制如表1-2所示。之所以采用高音分頻比的二分之一為基準(zhǔn)分頻系數(shù),是因?yàn)镽OM的位寬限制,而每兩個(gè)八度音頻率相差一倍,所以我們后面用譯碼器譯成各音頻的分頻系數(shù)輸出給分頻器,這樣由分頻器輸出到揚(yáng)聲器,揚(yáng)聲器就可發(fā)聲了。
5主界面界面介紹1、界面圖:2添加歌曲按鈕3、刪除歌曲按鈕4、音量的變大變小按鈕5、歌曲時(shí)間和進(jìn)度的顯示圖像6、下一首歌按鈕7、上一首歌按鈕8、停止播放按鈕9、播放按鈕10、單曲播放/隨機(jī)播放/順序播放按鈕11、空白部分為歌曲的菜單列表6系統(tǒng)的實(shí)現(xiàn)一、主要的對(duì)話框classCMCIPlayerDlg:publicCDialogEx{//構(gòu)造public: CMCIPlayerDlg(CWnd*pParent=NULL); //標(biāo)準(zhǔn)構(gòu)造函數(shù)//對(duì)話框數(shù)據(jù) enum{IDD=IDD_MCIPLAYER_DIALOG}; protected: virtualvoidDoDataExchange(CDataExchange*pDX); //
DDX/DDV支持//實(shí)現(xiàn)protected: HICONm_hIcon; //生成的消息映射函數(shù) virtualBOOLOnInitDialog(); afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam); afx_msgvoidOnPaint(); afx_msgHCURSOROnQueryDragIcon(); DECLARE_MESSAGE_MAP()public: //列表 CListBoxm_list; afx_msgvoidOnBnClickedOnstart(); afx_msgvoidOnBnClickedOnloadmusic(); voidload(musica); intisplay; intindex; CSliderCtrlvolume; afx_msgvoidOnNMCustomdrawVolun(NMHDR*pNMHDR,LRESULT
*pResult); afx_msgvoidOnBnClickedOnnext(); afx_msgvoidOnBnClickedOnper(); afx_msgvoidOnBnClickedOnstop(); LRESULTOnMciNotify(WPARAMwParam,LPARAMlParam);//設(shè)置播放
模式 afx_msgvoidOnBnClickedOrder(); afx_msgvoidOnLbnDblClk(); voidOnTimer(UINTnIDEvent); //進(jìn)度條 CSliderCtrlm_progress; afx_msgDWORDgetinfo(DWORDitem); afx_msgvoidOnBnClickedDeletemusic();};二、全局變量structmusic{ stringname; stringmPath;};intm_max;//進(jìn)度條的最大位置變量inthour,minute,second;//時(shí)間變量:小時(shí)、分鐘、秒鐘DWORDcdlen;//某個(gè)音頻文件的總時(shí)間長度DWORDm_count;//設(shè)備型號(hào)DWORDcdfrom,cdto;//歌曲的起點(diǎn)和終點(diǎn)DWORDDeviceID;list<music>mus;//全局歌曲鏈表vector<CString>allpath;//保存已有的歌三、初始化函數(shù)BOOLCMCIPlayerDlg::OnInitDialog(){ CDialogEx::OnInitDialog(); //將“關(guān)于...”菜單項(xiàng)添加到系統(tǒng)菜單中。 //volume.SetBkColor(RGB(37,38,37)); HBITMAPhBitmap;hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)); ((CButton*)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)); ((CButton*)GetDlgItem(IDC_ONPER))->SetBitmap(hBitmap); hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP2)); ((CButton*)GetDlgItem(IDC_ONNEXT))->SetBitmap(hBitmap); hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP5)); ((CButton*)GetDlgItem(IDC_ONSTOP))->SetBitmap(hBitmap); hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP7)); ((CButton*)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap);SetBackgroundImage(IDB_BITMAP6,BACKGR_TILE,NULL); isplay=0;//未播放狀態(tài) index=-1; m_list.SetCurSel(0);//設(shè)置初始選擇位置 volume.SetRange(0,1000);//滑塊的移動(dòng)范圍0~1000 volume.SetPos(500);//滑塊指針的初始位置設(shè)為500代表初始音
量為50 ifstreamrin;//導(dǎo)入原先數(shù)據(jù) rin.open("Mylist.txt"); //intrere; stringstr[2];if(rin>>setw(50)>>str[0]>>setw(150)>>str[1])while(!rin.eof()) { musicmu; =str[0]; mu.mPath=str[1]; CStringname; for(inti=0;i<.length();i++) { if([i]=='/') [i]=''; } name=.c_str(); CStringmPath; for(inti=0;i<mu.mPath.length();i++) { if(mu.mPath[i]=='/') mu.mPath[i]=''; } mPath=mu.mPath.c_str(); intj=m_list.GetCount();//把名字和地址插
入到list控件 m_list.InsertString(j,name); //CString*p=&mPath; allpath.push_back(mPath); rin>>str[0]>>str[1]; }rin.close(); //IDM_ABOUTBOX必須在系統(tǒng)命令范圍內(nèi)。 ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000); CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) { BOOLbNameValid; CStringstrAboutMenu; bNameValid=strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,
IDM_ABOUTBOX,strAboutMenu); } } //設(shè)置此對(duì)話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對(duì)話框時(shí),框架將
自動(dòng) //執(zhí)行此操作 SetIcon(m_hIcon,TRUE); //設(shè)置大圖標(biāo) SetIcon(m_hIcon,FALSE); //設(shè)置小圖標(biāo) //TODO:在此添加額外的初始化代碼 returnTRUE;//除非將焦點(diǎn)設(shè)置到控件,否則返回TRUE}三、播放、暫停功能voidCMCIPlayerDlg::OnBnClickedOnstart()//開始播放{ //TODO:在此添加控件通知處理程序代碼 if(isplay==0) { //TODO:在此添加控件通知處理程序代碼 if(m_list.GetCurSel()==-1)//判斷有沒有歌曲被選中,若
沒有,則從第一首開始播放-1代表沒有被選中 m_list.SetCurSel(0); if(m_list.GetCurSel()==index) { SetTimer(0,1000,NULL); mciSendCommand(DeviceID,MCI_RESUME,0,0); HBITMAPhBitmap;hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)); ((CButton*)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,"暫停"); isplay=1; } else { index=m_list.GetCurSel(); CStringdata; //m_list.GetDlgItemTextA(index,data); //CStringc=dat MCI_OPEN_PARMSmciopenparms;//打開 MCI_PLAY_PARMSmciplayparms;//播放 second=0;minute=0;hour=0; mciopenparms.lpstrElementName=allpath[index];//將音樂文件路
徑傳給設(shè)備 DWORDdwReturn; if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|
MCI_WAIT,(DWORD)(LPVOID)&mciopenparms)) { //如果打開文件失敗,則將出錯(cuò)信息儲(chǔ)存在buffer,并顯示
出錯(cuò)警告 charbuffer[256]; mciGetErrorString(dwReturn,buffer,256); MessageBox(buffer,"出錯(cuò)警告!",MB_ICONHAND|
MB_ICONERROR|MB_ICONSTOP); } DeviceID=mciopenparms.wDeviceID; mciopenparms.lpstrDeviceType=NULL;//文件類型 m_count=mciopenparms.wDeviceID;//多媒體設(shè)備類型編號(hào) mciplayparms.dwFrom=0;//每次播放都是從0開始播放 HWNDhwnd=GetSafeHwnd(); mciplayparms.dwCallback=(DWORD)hwnd; cdlen=getinfo(MCI_STATUS_LENGTH); CStringstime; CClientDCdc(this); dc.SetBkColor(RGB(255,255,255));//設(shè)置放置計(jì)數(shù)器區(qū)域的外觀 dc.SetTextColor(RGB(95,180,66)); stime.Format("%02d:%02d:%02d",cdlen/3600000,(cdlen
%3600000)/60000,((cdlen%3600000)%60000)/1000);//顯示時(shí)間進(jìn)度 dc.TextOut(328,13,stime); mciSendCommand(DeviceID,MCI_PLAY,/*MCI_FROM|*/MCI_NOTIFY,
(DWORD)(LPVOID)&mciplayparms); SetTimer(0,1000,NULL);//設(shè)置系統(tǒng)計(jì)數(shù)器,顯示歌曲播放的進(jìn)度 HBITMAPhBitmap;hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)); ((CButton*)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,"暫停"); isplay=1; } } else { KillTimer(0); mciSendCommand(DeviceID,MCI_PAUSE,0,0); HBITMAPhBitmap;hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)); ((CButton*)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); SetDlgItemText(IDC_ONSTART,"播放"); isplay=0; }}四、添加文件到播放列表voidCMCIPlayerDlg::OnBnClickedOnloadmusic()//導(dǎo)入歌曲{ //TODO:在此添加控件通知處理程序代碼 CFileDialogdlg(TRUE,_T("*.*"),NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,_T("mp3文件(*.mp3)|*.mp3|""wma文件(*.wma)|*.wma|" "wav文件(*.wav)|*.wav|" "所有文件(*.*)|*.*|"),NULL);//選項(xiàng)圖片的約定dlg.m_ofn.lpstrTitle=_T("打開音樂文件");//打開文件對(duì)話框
的標(biāo)題名if(dlg.DoModal()!=IDOK)//判斷是否獲得圖
片return;CStringmPath=dlg.GetPathName();//獲取音樂路徑 CStringmmpath=mPath; allpath.push_back(mPath); inti=mPath.ReverseFind('\\');//從磁盤地址中獲取歌曲名字 CStringname;name=mPath.Right(mPath.GetLength()-1-mPath.ReverseFind('\\')); intj=m_list.GetCount();//把名字和地址插入到list控件 m_list.InsertString(j,name); //m_shelllist.SetItemText(j,0,name); musicmu; =name.GetBuffer(); mu.mPath=mPath.GetBuffer(); load(mu);}voidCMCIPlayerDlg::load(musica){ list<music>mus; ifstreamrin; rin.open("Mylist.txt"); //intrere; stringstr[2];if(rin>>str[0]>>str[1])while(!rin.eof()) { musicmu; =str[0]; mu.mPath=str[1]; if(!=) mus.push_back(mu); else { MessageBox("已經(jīng)有該歌曲"); return; } rin>>str[0]>>str[1]; }rin.close(); for(inti=0;i<.length();i++)//把名
字里面的空格變?yōu)?_' { if([i]=='') [i]='/'; } for(inti=0;i<a.mPath.length();i++)//把地
址里面的空格變?yōu)?*' { if(a.mPath[i]=='') a.mPath[i]='/'; } mus.push_back(a); ofstreamout("Mylist.txt"); list<music>::iteratorit=mus.begin(); while(it!=mus.end()) { out<<left<<setw(50)<<(*it).name<<""<<setw(150)<<
(*it).mPath <<endl;it++; } out.close();}五、下一首\上一首voidCMCIPlayerDlg::OnBnClickedOnnext()//下一首{ //TODO:在此添加控件通知處理程序代碼 KillTimer(0); second=0;minute=0;hour=0; mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加載文件前先清空
上一次播放的設(shè)備 isplay=0; index=m_list.GetCurSel(); if(index+1==m_list.GetCount()) { m_list.SetCurSel(0); } else { m_list.SetCurSel(index+1); } OnBnClickedOnstart(); isplay=1;}voidCMCIPlayerDlg::OnBnClickedOnper()//上一首{ //TODO:在此添加控件通知處理程序代碼 KillTimer(0); second=0;minute=0;hour=0; mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加載文件前先清空
上一次播放的設(shè)備 isplay=0; index=m_list.GetCurSel(); if(index==0) { m_list.SetCurSel(m_list.GetCount()-1); } else { m_list.SetCurSel(index-1); } OnBnClickedOnstart(); isplay=1;}六、停止播放voidCMCIPlayerDlg::OnBnClickedOnstop()//停止{ //TODO:在此添加控件通知處理程序代碼 KillTimer(0); second=0;minute=0;hour=0; mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加載文件前先清空
上一次播放的設(shè)備 isplay=0; SetDlgItemText(IDC_ONSTART,"播放"); HBITMAPhBitmap;hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP4)); ((CButton*)GetDlgItem(IDC_ONSTART))->SetBitmap(hBitmap); index=-1; UpdateData(false);}七、播放模式voidCMCIPlayerDlg::OnBnClickedOrder()//設(shè)置播放模式{ //TODO:在此添加控件通知處理程序代碼 CStringpattern; GetDlgItemText(IDC_ORDER,pattern); if(pattern=="順序") { SetDlgItemText(IDC_ORDER,"隨機(jī)"); HBITMAPhBitmap; hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP8)); ((CButton*)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } if(pattern=="隨機(jī)") { SetDlgItemText(IDC_ORDER,"單曲"); HBITMAPhBitmap; hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP9)); ((CButton*)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); } if(pattern=="單曲") { SetDlgItemText(IDC_ORDER,"順序"); HBITMAPhBitmap; hBitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP7)); ((CButton*)GetDlgItem(IDC_ORDER))->SetBitmap(hBitmap); }}八、顯示時(shí)間和播放進(jìn)度voidCMCIPlayerDlg::OnTimer(UINTnIDEvent){ CStringstime; second++; CClientDCdc(this); dc.SetBkColor(RGB(255,255,255));//設(shè)置放置計(jì)數(shù)器區(qū)域的外觀 dc.SetTextColor(RGB(95,180,66));if(second==60)//設(shè)置鐘表的顯示 {minute++;second=0; } if(minute==60) {hour++;minute=0; } if(hour==24) {hour=0; } stime.Format("%02d:%02d:%02d",hour,minute,second);//顯示時(shí)間
進(jìn)度 dc.TextOut(68,13,stime); m_progress.SetRange(0,cdlen);//使進(jìn)度條的范圍與歌曲時(shí)間一致 UpdateData(false); m_max=cdfrom;//保存歌曲的當(dāng)前位置信息 if(m_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人抵押借款簡易合同示例
- 個(gè)人抵押貸款合同季度范本
- 臨街店鋪購買合同范本
- 二次供水設(shè)備采購合同
- 專業(yè)服裝管理軟件經(jīng)銷合同書
- 上海市股權(quán)轉(zhuǎn)讓合同標(biāo)準(zhǔn)范本
- 二手房銷售代理合同協(xié)議
- 中外合作種植戰(zhàn)略合作合同
- 云計(jì)算服務(wù)提供商數(shù)據(jù)保密合同
- 返聘人員協(xié)議書
- 小紅書種草營銷師(初級(jí))認(rèn)證考試真題試題庫(含答案)
- 癲癇病人的護(hù)理(課件)
- 企業(yè)資產(chǎn)管理培訓(xùn)
- 2024年WPS計(jì)算機(jī)二級(jí)考試題庫350題(含答案)
- 2024年4月27日浙江省事業(yè)單位招聘《職業(yè)能力傾向測(cè)驗(yàn)》試題
- 2024年6月浙江省高考地理試卷真題(含答案逐題解析)
- 醫(yī)院培訓(xùn)課件:《如何撰寫護(hù)理科研標(biāo)書》
- 風(fēng)車的原理小班課件
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年山東省濟(jì)南市中考英語試題卷(含答案)
- 2024年北師大版八年級(jí)上冊(cè)全冊(cè)數(shù)學(xué)單元測(cè)試題含答案
評(píng)論
0/150
提交評(píng)論