軟件開發(fā)平臺(tái)實(shí)驗(yàn)報(bào)告_第1頁
軟件開發(fā)平臺(tái)實(shí)驗(yàn)報(bào)告_第2頁
軟件開發(fā)平臺(tái)實(shí)驗(yàn)報(bào)告_第3頁
軟件開發(fā)平臺(tái)實(shí)驗(yàn)報(bào)告_第4頁
軟件開發(fā)平臺(tái)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課程設(shè)計(jì)報(bào)告課程名稱: 軟件開發(fā)平臺(tái)與工具 任課教師: 姓 名: 學(xué) 號(hào): 1. 引言1.1. 課程設(shè)計(jì)項(xiàng)目1.2. 背景簡(jiǎn)介從編程之初,便免不了和方法,類,接口之類的東西打交道。久而久之,自然會(huì)對(duì)此進(jìn)行總結(jié),由此而產(chǎn)生了開發(fā)平臺(tái)。而今中國(guó)的程序員之中,有很大一部分都是編一些企業(yè)MIS、政府MIS之類的程序。其主要工作就是對(duì)數(shù)據(jù)進(jìn)行一下增刪改查的操作,對(duì)MIS系統(tǒng)做一些基礎(chǔ)的管理而已。軟件開發(fā)平臺(tái)有兩種平臺(tái)模式:一種是傳統(tǒng)的C/S架構(gòu)模式,一種是現(xiàn)在流行的B/S架構(gòu)模式。B/S架構(gòu)模式是隨著互聯(lián)網(wǎng)的流行,自然又要求以互聯(lián)網(wǎng)為基礎(chǔ),把這些都網(wǎng)絡(luò)化,以實(shí)現(xiàn)網(wǎng)絡(luò)資源共享,而不是傳統(tǒng)的單機(jī)模式。這便激

2、發(fā)了軟件開發(fā)者的創(chuàng)造力,形成了軟件開發(fā)平臺(tái)的B/S架構(gòu)模式(web開發(fā)平臺(tái))。對(duì)于web開發(fā)平臺(tái),我的個(gè)人理解是:1.以web2.0為基礎(chǔ),基于互聯(lián)網(wǎng)的B/S架構(gòu)的軟件。它本身也是一個(gè)軟件,只不過不是最終的軟件產(chǎn)品,而是用于二次開發(fā)的軟件。2.用于實(shí)現(xiàn)各類業(yè)務(wù)系統(tǒng),如CRM、MIS、ERP、HIS、OA等等的開發(fā)。web開發(fā)平臺(tái)本身就是一個(gè)二次開發(fā)平臺(tái),他不同于諸如eclipse等這樣的開發(fā)工具,需要寫大量的代碼來完成各個(gè)業(yè)務(wù)模塊,二次開發(fā)平臺(tái)只需要設(shè)計(jì)好自己的數(shù)據(jù)結(jié)構(gòu),進(jìn)行一些簡(jiǎn)單的配置、拖拉等操作就可以完成業(yè)務(wù)系統(tǒng)的開發(fā)。3.能夠快速的實(shí)現(xiàn)各種報(bào)表包括復(fù)雜的圖表報(bào)表的設(shè)計(jì)制作,傳統(tǒng)的編碼式

3、開發(fā)需要自己去編寫想要的各種報(bào)表,而運(yùn)用開發(fā)平臺(tái)就簡(jiǎn)單多了,可以很輕松的配置出各種報(bào)表。使用web開發(fā)平臺(tái)的目的是為了實(shí)現(xiàn)資源共享、節(jié)約開發(fā)成本、提高開發(fā)效率、縮短開發(fā)周期。而如今的開發(fā)平臺(tái)大都采用非編碼的方式或者是極少編碼的方式,這樣正好達(dá)到了目的。有的甚至可以減少80%的代碼量,可見效率會(huì)提高多少。從國(guó)內(nèi)代表性的軟件開發(fā)平臺(tái)中1,我們可以看出這一類產(chǎn)品的大致脈絡(luò),亞思捷的TNT平臺(tái):TNT平臺(tái)的核心優(yōu)勢(shì)在于低成本的個(gè)性化,他可以同時(shí)向客戶提供T業(yè)務(wù)系統(tǒng)模板,即OA、CRM、文檔管理、信息門戶、在線考試等標(biāo)準(zhǔn)化的應(yīng)用系統(tǒng);N開源組件包,即上述應(yīng)用系統(tǒng)的源代碼;T開發(fā)工具,即基于微軟Jupit

4、er平臺(tái)的快速開發(fā)工具,開發(fā)者可以通過界面屬性設(shè)定的方法來完成對(duì)業(yè)務(wù)系統(tǒng)的快速開發(fā),自動(dòng)化生成C#和JAVA的二種語言的系統(tǒng)。顯然,TNT中的兩個(gè)“T”是業(yè)務(wù)的重點(diǎn),而殺手锏則是低價(jià)。其他廠家的軟件開發(fā)平臺(tái)與上述三種均大同小異,都是提供“標(biāo)準(zhǔn)化+行業(yè)化+個(gè)性化”的應(yīng)用模式。從中我們看出,這些軟件開發(fā)平臺(tái)確實(shí)都非常具有我們?cè)谏衔闹刑岬降募夹g(shù)共性,另外我們還都具有一個(gè)共同點(diǎn),那就是他們既提供軟件開發(fā)平臺(tái),又提供基于該平臺(tái)生成的各種應(yīng)用系統(tǒng),兩種產(chǎn)品相輔相成。這種模式也是軟件開發(fā)平臺(tái)銷售的主流模式。1.3.相關(guān)概念Unified Modeling Language (UML)又稱統(tǒng)一建模語言或標(biāo)準(zhǔn)建

5、模語言,是始于1997年一個(gè)OMG標(biāo)準(zhǔn),它是一個(gè)支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持,包括由需求分析到規(guī)格,到構(gòu)造和配置。 面向?qū)ο蟮姆治雠c設(shè)計(jì)(OOA&D,OOAD)方法的發(fā)展在80年代末至90年代中出現(xiàn)了一個(gè)高潮,UML是這個(gè)高潮的產(chǎn)物。它不僅統(tǒng)一了Booch、Rumbaugh和Jacobson的表示方法,而且對(duì)其作了進(jìn)一步的發(fā)展,并最終統(tǒng)一為大眾所接受的標(biāo)準(zhǔn)建模語言。UML是一種定義良好、易于表達(dá)、功能強(qiáng)大且普遍適用的建模語言。它融入了軟件工程領(lǐng)域的新思想、新方法和新技術(shù)。它的作用域不限于支持面向?qū)ο蟮姆治雠c設(shè)計(jì),還支持從需求分析開始的

6、軟件開發(fā)的全過程。1.4.編寫目的經(jīng)過本學(xué)期對(duì)軟件開發(fā)平臺(tái)與工具的學(xué)習(xí),對(duì)其進(jìn)行初步的掌握,通過課程設(shè)計(jì)(音樂播放器)編程,對(duì)所學(xué)內(nèi)容進(jìn)行實(shí)際應(yīng)用并發(fā)現(xiàn)學(xué)習(xí)中存在的問題,也是對(duì)自己學(xué)習(xí)工作的檢驗(yàn)和測(cè)試,在撰寫報(bào)告的過程中能夠更深刻的了解軟件開發(fā)平臺(tái)與工具的理念通過這份文檔來記錄實(shí)踐過程中遇到的問題以及改善的方法?,F(xiàn)在對(duì)整個(gè)過程加以認(rèn)識(shí)、記錄和總結(jié),留下經(jīng)驗(yàn),汲取教訓(xùn)。為以后的其他工作積攢經(jīng)驗(yàn),為以后遇到相同的問題和從事類似項(xiàng)目奠定堅(jiān)實(shí)的基礎(chǔ),以便以后有資可尋、有底可查,增長(zhǎng)個(gè)人見識(shí)。2部分產(chǎn)品代碼解析2.1簡(jiǎn)介本音樂播放器使用visual C+6.0自帶的Active Movie Contro

7、l Object控件,來建立自己的多媒體播放器。并以千千靜聽為模板,實(shí)現(xiàn)播放器最小化托盤的功能。Active Movie Control Object 微軟公司推出的ActiveMovie控件用于多媒體程序設(shè)計(jì)的控件,該控件提供非常完善的音頻和視頻媒體文件的播放功能。其能支持多種文件格式:例如最常見的WAV文件、AVI文件、MPEG壓縮格式的VCD視頻文件等,它都可以正常地進(jìn)行播放。這個(gè)控件可根據(jù)文件的后綴名自動(dòng)判別設(shè)備的類型,滯后能完成相應(yīng)的控制。因?yàn)楸緦?shí)例需要提供多媒體支持,所以使用Active Movie控件是很好的一個(gè)選擇。 事實(shí)上,很多優(yōu)秀的多媒體應(yīng)用程序,其內(nèi)部的多媒體播放就是利用

8、Active Movie控件來實(shí)現(xiàn)。通過這個(gè)控件用戶只需要精心地設(shè)計(jì)應(yīng)用程序的用戶界面,就可以開發(fā)出功能齊全、外觀漂亮、具有相當(dāng)水準(zhǔn)的媒體播放器。1. Active Movie的注冊(cè)方法現(xiàn)在使用的VC+6.0自帶Active Movie控件版本一般都是Active Movie3。用戶注冊(cè)這個(gè)控件之前,再VC+6.0集成開發(fā)環(huán)境中是無法找到Active Movie3控件的。所以應(yīng)首先注冊(cè)這個(gè)控件。步驟及方法為:(1) 單擊“開始”|“運(yùn)行”按鈕。(2) 在彈出的對(duì)話框中輸入“regsvr32 msdxm.ocx”。(3) 在VC+6.0的集成開發(fā)環(huán)境候中的菜單欄下執(zhí)行如下操作“”Project-

9、>Add to Project->Components and Controls->Registered ActiveX Controls”將彈出空間添加對(duì)話框,選擇其中的ActiveMovieControl Object,Inser,單擊OK按鈕。(4) 將空間拖放到對(duì)話框上。2. ActiveMovie的屬性及方法(1) ActiveMovie的特有屬性CurrentState:指示控件的狀態(tài)(stopped、paused、running)DisplayMode:顯示模式(時(shí)間方式、幀方式)FileName:指定該控件要操作的源文件的完整名字Rate:指示媒體流的回放率R

10、eadyState:指示控件狀態(tài),是否已經(jīng)裝入源文件SelectionStart:指示播放媒體流的開始位置SelectionEnd:指示播放媒體流的結(jié)束位置CurrentPosition:指示播放媒體流的當(dāng)前位置Volume:設(shè)置音量(2) ActiveMovie的方法ActiveMovie控件常用的方法有RUN/STOP/PAUSE這3個(gè)。分別控制流媒體的播放、停止和暫停。使用時(shí)直接調(diào)用它們即可。其他與通用方法如Drag、Move、SetFocus等,該控件也支持。此外ActiveMovie還有一些特有事件的處理方法。DisplayModeChange:當(dāng)DisplayMode屬性值發(fā)生變化

11、時(shí)觸發(fā)OpenComplete:當(dāng)源文件完全載入時(shí)觸發(fā)PositionChange:當(dāng)流媒體的當(dāng)前位置改變時(shí)觸發(fā)ReadyStateChange:當(dāng)控件的ReadyState屬性值改變時(shí)觸發(fā)StateChange:當(dāng)播放器的狀態(tài)改變時(shí)觸發(fā)Error:處理控件的出錯(cuò)事件 此外ActiveMovie控件還有一些屬性操作方法,通過這些方法獲取或者設(shè)置ActiveMovie控件的各個(gè)屬性值。ActiveMovie獲取屬性值的方法如下:GetCurrentPosition:獲取播放器的播放進(jìn)度GetAuthor:獲取作者信息GetBalance:獲取聲音平衡值GetFileName:獲取操作的源文件的完

12、整名字GetDisplayMode:獲取當(dāng)期顯示模式GetRate:獲取媒體流的回放率GetVolume:獲取當(dāng)前音量2.2音樂播放器最小化到托盤的實(shí)現(xiàn)方法當(dāng)前流行的播放器大大多都支持最小化到托盤事件ain.suoyi本播放器也仿照這些播放器實(shí)現(xiàn)這個(gè)功能。1.最小化到托盤的基礎(chǔ)把應(yīng)用程序最小化到托盤的基本原理就是將應(yīng)用程序的主窗體隱藏,然后在托盤中繪制應(yīng)用程序的圖標(biāo)。Shell_NotifyIcon()函數(shù)負(fù)責(zé)向系統(tǒng)傳遞消息,以添加、修改或刪除托盤區(qū)的圖標(biāo)。它的原型如下:WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNO

13、TIFYICONDATA pnid);該函數(shù)返回的是一個(gè)布魯爾值,失敗則返回0,返回非0則成功。函數(shù)有以下兩個(gè)參數(shù)。(1)dwMessage:標(biāo)示該函數(shù)的應(yīng)用功能,是添加、刪除,還是修改圖標(biāo)。如果是添加,則它的值為NIM_ADD;如刪除則是NIM_DELETE;而修改則是NIM_MODIFY。 (2)pnid:程序最小化到托盤的圖標(biāo)信息結(jié)構(gòu)體 2.實(shí)現(xiàn)最小化托盤 最小化按鈕及Hide按鈕處理函數(shù)OnHide(),將播放器最小化到托盤。 void CMusicPlayerDlg:OnHide() NOTIFYICONDATA nid; nid.cbSize=(DWORD)sizeof(NOTIF

14、YICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_MUSICPLAYER;/自定義的消息名稱 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME); strcpy(nid.szTip,"MusicPlayer");/信息提示條為“計(jì)劃任務(wù)提醒” Shell_NotifyIcon(NI

15、M_ADD,&nid);/在托盤區(qū)添加圖標(biāo) ShowWindow(SW_HIDE);/隱藏主窗口 最小化到托盤的圖標(biāo)ID為IDR_MAINFRAME。它的消息為WM_MUSICPLAYEAR。當(dāng)鼠標(biāo)移過圖標(biāo)時(shí)提示信息為“MusicPlayer”3.處理托盤圖標(biāo)消息添加最小化到托盤圖標(biāo)發(fā)送的自定義消息WIN_MUSICPLAYER的映射。ON_MESSAGE(WM_MSICPLAYER,OnShowMusicPlayer)添加它的處理函數(shù)為OnShowMusicPlayer(),代碼如下:LRESULT CMusicPlayerDlg:OnShowMusicPlayer(WPARAM w

16、Param, LPARAM lParam)if(wParam!=IDR_MAINFRAME) return 1; switch(lParam) case WM_RBUTTONUP:/右鍵起來時(shí)彈出快捷菜單,這里只有一個(gè)“關(guān)閉” LPPOINT lpoint=new tagPOINT; :GetCursorPos(lpoint);/得到鼠標(biāo)位置 CMenu menu; menu.CreatePopupMenu();/聲明一個(gè)彈出式菜單 /增加菜單項(xiàng)“關(guān)閉”,點(diǎn)擊則發(fā)送消息WM_DESTROY給主窗口(已 /隱藏),將程序結(jié)束。 menu.AppendMenu(MF_STRING,MY_OPEN,

17、"Open");menu.AppendMenu(MF_STRING,MY_PLAY,"Play");menu.AppendMenu(MF_STRING,MY_PAUSE,"Pause"); menu.AppendMenu(MF_STRING,MY_STOP,"Stop");menu.AppendMenu(MF_STRING,MY_QUITE,"Close"); /確定彈出式菜單的位置 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint-&g

18、t;y,this); /資源回收 HMENU hmenu=menu.Detach(); menu.DestroyMenu(); delete lpoint; break; case WM_LBUTTONDBLCLK:/雙擊左鍵的處理 this->ShowWindow(SW_SHOW);/簡(jiǎn)單的顯示主窗口完事兒 break; return 0; 3總結(jié)軟件開發(fā)平臺(tái)是一種軟件開發(fā)工具,以通用技術(shù)架構(gòu)為基礎(chǔ),集成常用建模 工具、二次開發(fā)包、基礎(chǔ)解決方案等而成。軟件開發(fā)工具是很方便地把一種編程 語言代碼化并編譯執(zhí)行的工具?,F(xiàn)在的軟件開發(fā)工具逐漸顯出智能化、網(wǎng)絡(luò)化、 一體化、標(biāo)準(zhǔn)化的趨勢(shì)。對(duì)于很多

19、企業(yè)來說,軟件開發(fā)平臺(tái)只被定義為信息化工 具,但成功進(jìn)行過企業(yè)信息化建設(shè)的 CIO 們會(huì)對(duì)軟件開發(fā)平臺(tái)有著更為正確的 理解,那就是軟件開發(fā)平臺(tái)不僅是信息化工具,更是管理思想的沉淀。隨著在企業(yè)中發(fā)揮出的作用被逐步肯定, 目前軟件開發(fā)平臺(tái)在國(guó)內(nèi)信息化領(lǐng) 域也占據(jù)著越來越重要的位置, 其應(yīng)用已經(jīng)成為一種趨勢(shì)。 相對(duì)于傳統(tǒng)開發(fā)模式, 許多軟件開發(fā)平臺(tái)具有很多顯著優(yōu)勢(shì),包括優(yōu)化產(chǎn)品基礎(chǔ)架構(gòu),提升軟件開發(fā)質(zhì) 量;減少編碼率,提高開發(fā)效率,提升開發(fā)的靈活性;可以充分關(guān)注客戶需求, 實(shí)現(xiàn)按需定制;實(shí)現(xiàn)配置組件的標(biāo)準(zhǔn)化,提升產(chǎn)品穩(wěn)定性和兼容性;提升企業(yè)開 發(fā)能力, 降低后期維護(hù)的時(shí)間和成本等, 可以使開發(fā)者有更

20、多時(shí)間關(guān)注客戶需求, 在項(xiàng)目的需求、設(shè)計(jì)、開發(fā)、測(cè)試、部署、維護(hù)等各個(gè)階段均可提供強(qiáng)大的支持。 這些都使得,軟件開發(fā)平臺(tái)在企業(yè)眼中成為非常給力的信息化工具。軟件開發(fā)特別是大型軟件是一項(xiàng)浩大的工程,需要幾個(gè)人、十幾個(gè)人、幾十 個(gè)人甚至幾百個(gè)人合作開發(fā)幾個(gè)月、十幾個(gè)月甚至幾年。要保證系統(tǒng)的協(xié)調(diào)性、 統(tǒng)一性和連續(xù)性,就需要在開發(fā)之前制定嚴(yán)格、詳細(xì)的開發(fā)規(guī)范。開發(fā)規(guī)范的制 定需要花費(fèi)一定的時(shí)間和精力,但是"磨刀不誤砍柴功",它相當(dāng)于把今后開發(fā)過程 中開發(fā)人員都要遇到的問題提前做了一個(gè)考慮。有了開發(fā)規(guī)范,在后續(xù)的開發(fā)過 程中,設(shè)計(jì)人員就不必每次考慮如何為一個(gè)字段命名,編程人員也不必去

21、想某個(gè)程 序的結(jié)構(gòu)和布局應(yīng)當(dāng) 怎樣,測(cè)試人員也有了判斷程序?qū)﹀e(cuò)的標(biāo)準(zhǔn)。開發(fā)規(guī)范在項(xiàng) 目開發(fā)工作中起著事前約定的作用,需要所有開發(fā)人員共同遵守。它約束開發(fā)人 員的行為和設(shè)計(jì)、編程風(fēng)格,使不同子系統(tǒng)和模塊的設(shè)計(jì)、編程人員達(dá)成默契,以 便形成整個(gè)系統(tǒng)的和諧步調(diào)和統(tǒng)一風(fēng)格,也便于今后的系統(tǒng)維護(hù)和擴(kuò)展工作。通過這學(xué)期的學(xué)習(xí),使我們對(duì)軟件開發(fā)平臺(tái)與工具有了更深入的了解。小組 分工式的作業(yè)給我們提供了很好的交流學(xué)習(xí)氛圍,讓大家能夠在交流中學(xué)習(xí),在 學(xué)習(xí)中互相了解。但由于自己的水平和經(jīng)驗(yàn)不足,還存在著一定的問題。還要繼 續(xù)努力,爭(zhēng)取獲得更大成績(jī)。4產(chǎn)品完整代碼/ MusicPlayerDlg.cpp : im

22、plementation file/#include "stdafx.h"#include "MusicPlayer.h"#include "MusicPlayerDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#define WM_MUSICPLAYER (WM_USER + 102)/ CAboutDlg dialog used for App Aboutclass CAboutDlg : pu

23、blic CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAbout

24、Dlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No me

25、ssage handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMusicPlayerDlg dialogCMusicPlayerDlg:CMusicPlayerDlg(CWnd* pParent /*=NULL*/): CDialog(CMusicPlayerDlg:IDD, pParent)/AFX_DATA_INIT(CMusicPlayerDlg)/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_bOpen = false;m_bRep

26、eat = false;m_changed = 0;m_titleRect.left = 0;m_time = 0;m_curPos = 0;m_state = 3;m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CMusicPlayerDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMusicPlayerDlg)DDX_Control(pDX, IDC_SLIDER2, m_voice);DDX_Control(pDX

27、, IDC_SLIDER1, m_ctlSlider);DDX_Control(pDX, IDC_ACTIVEMOVIECONTROL1, m_ActiveMovie);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMusicPlayerDlg, CDialog)/AFX_MSG_MAP(CMusicPlayerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_CTLCOLOR()ON_BN_CLICKED(MY_OPEN, OnOpen)ON_BN_CLICKED(MY_PLAY, OnPlay)ON

28、_BN_CLICKED(MY_PAUSE, OnPause)ON_BN_CLICKED(MY_STOP, OnStop)ON_BN_CLICKED(MY_REPEAT, OnRepeat)ON_BN_CLICKED(MY_HIDE, OnHide)ON_BN_CLICKED(MY_EXIT, OnExit)ON_BN_CLICKED(MY_QUITE, OnExit)ON_BN_CLICKED(MY_MIN, OnHide)ON_WM_LBUTTONDOWN()ON_WM_TIMER()ON_WM_CANCELMODE()ON_WM_VSCROLL()/AFX_MSG_MAPON_MESSAG

29、E(WM_MUSICPLAYER, OnShowMusicPlayer)END_MESSAGE_MAP()/ CMusicPlayerDlg message handlersBOOL CMusicPlayerDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSE

30、RT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this

31、dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconm_bmBack.DeleteObject();m_brBack.DeleteObject();m_bmBack.LoadBitmap(IDB_BACK);m_brBack.CreatePatternBrush(&m_bmBack);/

32、 TODO: Add extra initialization hereHRGN c;HRGN r1;int x,y,i = 0;x = 37; y = 115;COLORREF ForeColor,hoverColor,downColor; ForeColor = RGB(50, 50, 50);hoverColor = RGB(120, 120, 120);downColor = RGB(180, 180, 120);HRGN min;min = CreateRectRgn(0,0,20,15);m_Min.Create("_", WS_CHILD | WS_VISIB

33、LE, CPoint(320, 7), min, this, MY_MIN, 1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE); m_Max.Create("|", WS_CHILD | WS_VISIBLE | WS_DISABLED, CPoint(346, 7), min, this, MY_MAX, 1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE); m_Quite.Create("X", WS_

34、CHILD | WS_VISIBLE, CPoint(372, 7), min, this, MY_QUITE, 1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE); c = CreateRectRgn(8, 0, 55, 31);r1 = CreateEllipticRgn(48, 8, 15 + 48, 15 + 8);CombineRgn(c, c, r1, RGN_OR);m_Open.Create("Open", WS_CHILD | WS_VISIBLE, CPoint(x + 48*(i

35、+), y), c, this, MY_OPEN, 1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE); r1 = CreateEllipticRgn(0, 8, 15, 15 + 8);CombineRgn(c, c, r1, RGN_DIFF);m_Play.Create("Play", WS_CHILD | WS_VISIBLE, CPoint(x + 48*(i+), y), c, this, MY_PLAY, 1, ForeColor, downColor ,hoverColor, GetS

36、ysColor(COLOR_BTNFACE);m_Pause.Create("Pause", WS_CHILD | WS_VISIBLE, CPoint(x + 48*(i+), y ), c, this, MY_PAUSE, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE);m_Stop.Create("Stop",WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i+), y ), c, this, MY_STOP, 1, ForeColor, do

37、wnColor ,hoverColor, GetSysColor(COLOR_BTNFACE);m_Repeat.Create("Repeat", WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i+), y), c, this, MY_REPEAT, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE);m_Hide.Create("Hide", WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i+), y), c, this,

38、 MY_HIDE, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE);c = CreateRectRgn(8, 0, 63, 31);r1 = CreateEllipticRgn(0, 8, 15, 15 + 8);CombineRgn(c, c, r1, RGN_DIFF);m_Exit.Create("Exit", WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i+), y ), c, this, MY_EXIT, 1, ForeColor, downColor ,

39、hoverColor, GetSysColor(COLOR_BTNFACE);DeleteObject(c);DeleteObject(r1);m_ctlSlider.SetRange(0,1000);m_voice.SetRange(0,10);m_voice.SetPos(7);SetWindowText("TT-Play");return TRUE; / return TRUE unless you set the focus to a controlvoid CMusicPlayerDlg:OnSysCommand(UINT nID, LPARAM lParam)i

40、f (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by th

41、e framework.void CMusicPlayerDlg:OnPaint() CPaintDC dc(this); / device context for paintingif(m_bOpen)CSize size;CDC memDC,maskDC;CString str;COLORREF fileColor,timeColor,infoColor;size = dc.GetTextExtent(m_strMusic);fileColor = RGB(156,196,94);timeColor = RGB(255,0,0);infoColor = RGB(105,121,148);m

42、_titleRect.left -= 1;if(m_titleRect.left < -size.cx)m_titleRect.left = size.cx;m_changed = 0;Invalidate();m_titleRect.top = 0;m_titleRect.right = size.cx;m_titleRect.bottom = size.cy;memDC.CreateCompatibleDC(&dc);maskDC.CreateCompatibleDC(&dc);CBitmap bkbmp;bkbmp.CreateCompatibleBitmap(&a

43、mp;dc,size.cx,size.cy);memDC.SelectObject(&bkbmp);maskDC.SelectObject(&bkbmp);memDC.SetTextColor(RGB(50,250,160);memDC.DrawText(m_strMusic, &m_titleRect, DT_BOTTOM);maskDC.SetTextColor(RGB(0,0,0);maskDC.DrawText(m_strMusic, &m_titleRect, DT_BOTTOM);dc.SetBkMode(TRANSPARENT);dc.SetTex

44、tColor(fileColor);if(m_titleRect.left >= 0)dc.BitBlt(30 + m_titleRect.left,30,size.cx - m_titleRect.left ,size.cy,&maskDC,m_titleRect.left,0,MERGEPAINT);dc.BitBlt(30 + m_titleRect.left,30,size.cx - m_titleRect.left,size.cy,&memDC,m_titleRect.left,0,SRCAND);elsedc.BitBlt(30,30,size.cx + m_

45、titleRect.left,size.cy,&maskDC,0,0,MERGEPAINT);dc.BitBlt(30,30,size.cx + m_titleRect.left,size.cy,&memDC,0,0,SRCAND);dc.SetTextColor(infoColor);if(m_bRepeat)switch(m_state)case 1:str.Format("狀態(tài): 播放 - Repeat");break;case 2:str.Format("狀態(tài): 暫停 - Repeat");break;case 3:str.For

46、mat("狀態(tài): 播放 - Repeat");break;elseswitch(m_state)case 1:str.Format("狀態(tài): 播放 - No Repeat");break;case 2:str.Format("狀態(tài): 暫停 - No Repeat");break;case 3:str.Format("狀態(tài): 停止 - No Repeat");break;dc.TextOut(30,48,str);dc.SetTextColor(fileColor);str.Format("%s - %s&

47、quot;, m_Author,m_title);dc.TextOut(30,65,str);dc.SetTextColor(timeColor);str.Format("%02d:%02d:%02d/%02d:%02d:%02d",int(m_curPos) / 360,int(m_curPos) / 60, int(m_curPos )% 60, int(m_time) / 360,int(m_time) / 60, int(m_time) % 60);dc.TextOut(260,50,str);/ The system calls this to obtain th

48、e cursor to display while the user drags/ the minimized window.HCURSOR CMusicPlayerDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;HBRUSH CMusicPlayerDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);/ TODO: Change any attributes of the DC herei

49、f( nCtlColor = CTLCOLOR_DLG)return m_brBack;/ TODO: Return a different brush if the default is not desiredreturn hbr;void CMusicPlayerDlg:OnOpen() char szFileFilter ="Mp3 File(*.mp3)|*.mp3|" "Wma File(*.wma)|*.wma|" "Video File(*.dat)|*.dat|" "Wave File(*.wav)|*.wa

50、v|" "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 dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilte

51、r); if(dlg.DoModal()=IDOK) CString PathName=dlg.GetPathName(); PathName.MakeUpper(); m_ActiveMovie.SetFileName(PathName); m_strMusic = dlg.GetFileName();/m_ActiveMovie.getm_bOpen = true;OnPlay();m_state = 3;Invalidate(); void CMusicPlayerDlg:OnPlay() m_ActiveMovie.Run();/播放文件 SetTimer(0,20,NULL);/設(shè)置

52、定時(shí)器 m_Author = m_ActiveMovie.GetAuthor();m_title = m_ActiveMovie.GetTitle();m_copyRight = m_ActiveMovie.GetCopyright();m_description = m_ActiveMovie.GetDescription();double a = m_ActiveMovie.GetSelectionEnd();double b = m_ActiveMovie.GetSelectionStart();/Durationm_time = m_ActiveMovie.GetDuration();

53、m_ctlSlider.SetRange(b,a);long Volume=m_ActiveMovie.GetVolume(); m_voice.SetPos(Volume /(-150);m_state = 1;Invalidate();void CMusicPlayerDlg:OnPause() m_ActiveMovie.Pause();m_state = 2;Invalidate();void CMusicPlayerDlg:OnStop() m_ActiveMovie.Stop();m_state = 3;Invalidate();void CMusicPlayerDlg:OnRepeat() m_bRepeat = 1 - m_bRepeat;Invalidate();void CMusicPlayerDlg:OnHide() NOTIFYICONDATA nid; nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ; nid.uCallbackMessage=WM_MUSICPLAYER;/自定義的消息名稱 nid.hIco

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論