![軟件開發(fā)平臺實驗報告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/26/25f23270-c80a-4240-a26c-533468a9350d/25f23270-c80a-4240-a26c-533468a9350d1.gif)
![軟件開發(fā)平臺實驗報告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/26/25f23270-c80a-4240-a26c-533468a9350d/25f23270-c80a-4240-a26c-533468a9350d2.gif)
![軟件開發(fā)平臺實驗報告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/26/25f23270-c80a-4240-a26c-533468a9350d/25f23270-c80a-4240-a26c-533468a9350d3.gif)
![軟件開發(fā)平臺實驗報告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/26/25f23270-c80a-4240-a26c-533468a9350d/25f23270-c80a-4240-a26c-533468a9350d4.gif)
![軟件開發(fā)平臺實驗報告_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-5/26/25f23270-c80a-4240-a26c-533468a9350d/25f23270-c80a-4240-a26c-533468a9350d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計報告課程名稱: 軟件開發(fā)平臺與工具 任課教師: 姓 名: 學 號: 1. 引言1.1. 課程設(shè)計項目1.2. 背景簡介從編程之初,便免不了和方法,類,接口之類的東西打交道。久而久之,自然會對此進行總結(jié),由此而產(chǎn)生了開發(fā)平臺。而今中國的程序員之中,有很大一部分都是編一些企業(yè)MIS、政府MIS之類的程序。其主要工作就是對數(shù)據(jù)進行一下增刪改查的操作,對MIS系統(tǒng)做一些基礎(chǔ)的管理而已。軟件開發(fā)平臺有兩種平臺模式:一種是傳統(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ò)化,以實現(xiàn)網(wǎng)絡(luò)資源共享,而不是傳統(tǒng)的單機模式。這便激
2、發(fā)了軟件開發(fā)者的創(chuàng)造力,形成了軟件開發(fā)平臺的B/S架構(gòu)模式(web開發(fā)平臺)。對于web開發(fā)平臺,我的個人理解是:1.以web2.0為基礎(chǔ),基于互聯(lián)網(wǎng)的B/S架構(gòu)的軟件。它本身也是一個軟件,只不過不是最終的軟件產(chǎn)品,而是用于二次開發(fā)的軟件。2.用于實現(xiàn)各類業(yè)務(wù)系統(tǒng),如CRM、MIS、ERP、HIS、OA等等的開發(fā)。web開發(fā)平臺本身就是一個二次開發(fā)平臺,他不同于諸如eclipse等這樣的開發(fā)工具,需要寫大量的代碼來完成各個業(yè)務(wù)模塊,二次開發(fā)平臺只需要設(shè)計好自己的數(shù)據(jù)結(jié)構(gòu),進行一些簡單的配置、拖拉等操作就可以完成業(yè)務(wù)系統(tǒng)的開發(fā)。3.能夠快速的實現(xiàn)各種報表包括復(fù)雜的圖表報表的設(shè)計制作,傳統(tǒng)的編碼式
3、開發(fā)需要自己去編寫想要的各種報表,而運用開發(fā)平臺就簡單多了,可以很輕松的配置出各種報表。使用web開發(fā)平臺的目的是為了實現(xiàn)資源共享、節(jié)約開發(fā)成本、提高開發(fā)效率、縮短開發(fā)周期。而如今的開發(fā)平臺大都采用非編碼的方式或者是極少編碼的方式,這樣正好達到了目的。有的甚至可以減少80%的代碼量,可見效率會提高多少。從國內(nèi)代表性的軟件開發(fā)平臺中1,我們可以看出這一類產(chǎn)品的大致脈絡(luò),亞思捷的TNT平臺:TNT平臺的核心優(yōu)勢在于低成本的個性化,他可以同時向客戶提供T業(yè)務(wù)系統(tǒng)模板,即OA、CRM、文檔管理、信息門戶、在線考試等標準化的應(yīng)用系統(tǒng);N開源組件包,即上述應(yīng)用系統(tǒng)的源代碼;T開發(fā)工具,即基于微軟Jupit
4、er平臺的快速開發(fā)工具,開發(fā)者可以通過界面屬性設(shè)定的方法來完成對業(yè)務(wù)系統(tǒng)的快速開發(fā),自動化生成C#和JAVA的二種語言的系統(tǒng)。顯然,TNT中的兩個“T”是業(yè)務(wù)的重點,而殺手锏則是低價。其他廠家的軟件開發(fā)平臺與上述三種均大同小異,都是提供“標準化+行業(yè)化+個性化”的應(yīng)用模式。從中我們看出,這些軟件開發(fā)平臺確實都非常具有我們在上文中提到的技術(shù)共性,另外我們還都具有一個共同點,那就是他們既提供軟件開發(fā)平臺,又提供基于該平臺生成的各種應(yīng)用系統(tǒng),兩種產(chǎn)品相輔相成。這種模式也是軟件開發(fā)平臺銷售的主流模式。1.3.相關(guān)概念Unified Modeling Language (UML)又稱統(tǒng)一建模語言或標準建
5、模語言,是始于1997年一個OMG標準,它是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言,為軟件開發(fā)的所有階段提供模型化和可視化支持,包括由需求分析到規(guī)格,到構(gòu)造和配置。 面向?qū)ο蟮姆治雠c設(shè)計(OOA&D,OOAD)方法的發(fā)展在80年代末至90年代中出現(xiàn)了一個高潮,UML是這個高潮的產(chǎn)物。它不僅統(tǒng)一了Booch、Rumbaugh和Jacobson的表示方法,而且對其作了進一步的發(fā)展,并最終統(tǒng)一為大眾所接受的標準建模語言。UML是一種定義良好、易于表達、功能強大且普遍適用的建模語言。它融入了軟件工程領(lǐng)域的新思想、新方法和新技術(shù)。它的作用域不限于支持面向?qū)ο蟮姆治雠c設(shè)計,還支持從需求分析開始的
6、軟件開發(fā)的全過程。1.4.編寫目的經(jīng)過本學期對軟件開發(fā)平臺與工具的學習,對其進行初步的掌握,通過課程設(shè)計(音樂播放器)編程,對所學內(nèi)容進行實際應(yīng)用并發(fā)現(xiàn)學習中存在的問題,也是對自己學習工作的檢驗和測試,在撰寫報告的過程中能夠更深刻的了解軟件開發(fā)平臺與工具的理念通過這份文檔來記錄實踐過程中遇到的問題以及改善的方法。現(xiàn)在對整個過程加以認識、記錄和總結(jié),留下經(jīng)驗,汲取教訓。為以后的其他工作積攢經(jīng)驗,為以后遇到相同的問題和從事類似項目奠定堅實的基礎(chǔ),以便以后有資可尋、有底可查,增長個人見識。2部分產(chǎn)品代碼解析2.1簡介本音樂播放器使用visual C+6.0自帶的Active Movie Contro
7、l Object控件,來建立自己的多媒體播放器。并以千千靜聽為模板,實現(xiàn)播放器最小化托盤的功能。Active Movie Control Object 微軟公司推出的ActiveMovie控件用于多媒體程序設(shè)計的控件,該控件提供非常完善的音頻和視頻媒體文件的播放功能。其能支持多種文件格式:例如最常見的WAV文件、AVI文件、MPEG壓縮格式的VCD視頻文件等,它都可以正常地進行播放。這個控件可根據(jù)文件的后綴名自動判別設(shè)備的類型,滯后能完成相應(yīng)的控制。因為本實例需要提供多媒體支持,所以使用Active Movie控件是很好的一個選擇。 事實上,很多優(yōu)秀的多媒體應(yīng)用程序,其內(nèi)部的多媒體播放就是利用
8、Active Movie控件來實現(xiàn)。通過這個控件用戶只需要精心地設(shè)計應(yīng)用程序的用戶界面,就可以開發(fā)出功能齊全、外觀漂亮、具有相當水準的媒體播放器。1. Active Movie的注冊方法現(xiàn)在使用的VC+6.0自帶Active Movie控件版本一般都是Active Movie3。用戶注冊這個控件之前,再VC+6.0集成開發(fā)環(huán)境中是無法找到Active Movie3控件的。所以應(yīng)首先注冊這個控件。步驟及方法為:(1) 單擊“開始”|“運行”按鈕。(2) 在彈出的對話框中輸入“regsvr32 msdxm.ocx”。(3) 在VC+6.0的集成開發(fā)環(huán)境候中的菜單欄下執(zhí)行如下操作“”Project-
9、>Add to Project->Components and Controls->Registered ActiveX Controls”將彈出空間添加對話框,選擇其中的ActiveMovieControl Object,Inser,單擊OK按鈕。(4) 將空間拖放到對話框上。2. ActiveMovie的屬性及方法(1) ActiveMovie的特有屬性CurrentState:指示控件的狀態(tài)(stopped、paused、running)DisplayMode:顯示模式(時間方式、幀方式)FileName:指定該控件要操作的源文件的完整名字Rate:指示媒體流的回放率R
10、eadyState:指示控件狀態(tài),是否已經(jīng)裝入源文件SelectionStart:指示播放媒體流的開始位置SelectionEnd:指示播放媒體流的結(jié)束位置CurrentPosition:指示播放媒體流的當前位置Volume:設(shè)置音量(2) ActiveMovie的方法ActiveMovie控件常用的方法有RUN/STOP/PAUSE這3個。分別控制流媒體的播放、停止和暫停。使用時直接調(diào)用它們即可。其他與通用方法如Drag、Move、SetFocus等,該控件也支持。此外ActiveMovie還有一些特有事件的處理方法。DisplayModeChange:當DisplayMode屬性值發(fā)生變化
11、時觸發(fā)OpenComplete:當源文件完全載入時觸發(fā)PositionChange:當流媒體的當前位置改變時觸發(fā)ReadyStateChange:當控件的ReadyState屬性值改變時觸發(fā)StateChange:當播放器的狀態(tài)改變時觸發(fā)Error:處理控件的出錯事件 此外ActiveMovie控件還有一些屬性操作方法,通過這些方法獲取或者設(shè)置ActiveMovie控件的各個屬性值。ActiveMovie獲取屬性值的方法如下:GetCurrentPosition:獲取播放器的播放進度GetAuthor:獲取作者信息GetBalance:獲取聲音平衡值GetFileName:獲取操作的源文件的完
12、整名字GetDisplayMode:獲取當期顯示模式GetRate:獲取媒體流的回放率GetVolume:獲取當前音量2.2音樂播放器最小化到托盤的實現(xiàn)方法當前流行的播放器大大多都支持最小化到托盤事件ain.suoyi本播放器也仿照這些播放器實現(xiàn)這個功能。1.最小化到托盤的基礎(chǔ)把應(yīng)用程序最小化到托盤的基本原理就是將應(yīng)用程序的主窗體隱藏,然后在托盤中繪制應(yīng)用程序的圖標。Shell_NotifyIcon()函數(shù)負責向系統(tǒng)傳遞消息,以添加、修改或刪除托盤區(qū)的圖標。它的原型如下:WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNO
13、TIFYICONDATA pnid);該函數(shù)返回的是一個布魯爾值,失敗則返回0,返回非0則成功。函數(shù)有以下兩個參數(shù)。(1)dwMessage:標示該函數(shù)的應(yīng)用功能,是添加、刪除,還是修改圖標。如果是添加,則它的值為NIM_ADD;如刪除則是NIM_DELETE;而修改則是NIM_MODIFY。 (2)pnid:程序最小化到托盤的圖標信息結(jié)構(gòu)體 2.實現(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");/信息提示條為“計劃任務(wù)提醒” Shell_NotifyIcon(NI
15、M_ADD,&nid);/在托盤區(qū)添加圖標 ShowWindow(SW_HIDE);/隱藏主窗口 最小化到托盤的圖標ID為IDR_MAINFRAME。它的消息為WM_MUSICPLAYEAR。當鼠標移過圖標時提示信息為“MusicPlayer”3.處理托盤圖標消息添加最小化到托盤圖標發(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:/右鍵起來時彈出快捷菜單,這里只有一個“關(guān)閉” LPPOINT lpoint=new tagPOINT; :GetCursorPos(lpoint);/得到鼠標位置 CMenu menu; menu.CreatePopupMenu();/聲明一個彈出式菜單 /增加菜單項“關(guā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);/簡單的顯示主窗口完事兒 break; return 0; 3總結(jié)軟件開發(fā)平臺是一種軟件開發(fā)工具,以通用技術(shù)架構(gòu)為基礎(chǔ),集成常用建模 工具、二次開發(fā)包、基礎(chǔ)解決方案等而成。軟件開發(fā)工具是很方便地把一種編程 語言代碼化并編譯執(zhí)行的工具。現(xiàn)在的軟件開發(fā)工具逐漸顯出智能化、網(wǎng)絡(luò)化、 一體化、標準化的趨勢。對于很多
19、企業(yè)來說,軟件開發(fā)平臺只被定義為信息化工 具,但成功進行過企業(yè)信息化建設(shè)的 CIO 們會對軟件開發(fā)平臺有著更為正確的 理解,那就是軟件開發(fā)平臺不僅是信息化工具,更是管理思想的沉淀。隨著在企業(yè)中發(fā)揮出的作用被逐步肯定, 目前軟件開發(fā)平臺在國內(nèi)信息化領(lǐng) 域也占據(jù)著越來越重要的位置, 其應(yīng)用已經(jīng)成為一種趨勢。 相對于傳統(tǒng)開發(fā)模式, 許多軟件開發(fā)平臺具有很多顯著優(yōu)勢,包括優(yōu)化產(chǎn)品基礎(chǔ)架構(gòu),提升軟件開發(fā)質(zhì) 量;減少編碼率,提高開發(fā)效率,提升開發(fā)的靈活性;可以充分關(guān)注客戶需求, 實現(xiàn)按需定制;實現(xiàn)配置組件的標準化,提升產(chǎn)品穩(wěn)定性和兼容性;提升企業(yè)開 發(fā)能力, 降低后期維護的時間和成本等, 可以使開發(fā)者有更
20、多時間關(guān)注客戶需求, 在項目的需求、設(shè)計、開發(fā)、測試、部署、維護等各個階段均可提供強大的支持。 這些都使得,軟件開發(fā)平臺在企業(yè)眼中成為非常給力的信息化工具。軟件開發(fā)特別是大型軟件是一項浩大的工程,需要幾個人、十幾個人、幾十 個人甚至幾百個人合作開發(fā)幾個月、十幾個月甚至幾年。要保證系統(tǒng)的協(xié)調(diào)性、 統(tǒng)一性和連續(xù)性,就需要在開發(fā)之前制定嚴格、詳細的開發(fā)規(guī)范。開發(fā)規(guī)范的制 定需要花費一定的時間和精力,但是"磨刀不誤砍柴功",它相當于把今后開發(fā)過程 中開發(fā)人員都要遇到的問題提前做了一個考慮。有了開發(fā)規(guī)范,在后續(xù)的開發(fā)過 程中,設(shè)計人員就不必每次考慮如何為一個字段命名,編程人員也不必去
21、想某個程 序的結(jié)構(gòu)和布局應(yīng)當 怎樣,測試人員也有了判斷程序?qū)﹀e的標準。開發(fā)規(guī)范在項 目開發(fā)工作中起著事前約定的作用,需要所有開發(fā)人員共同遵守。它約束開發(fā)人 員的行為和設(shè)計、編程風格,使不同子系統(tǒng)和模塊的設(shè)計、編程人員達成默契,以 便形成整個系統(tǒng)的和諧步調(diào)和統(tǒng)一風格,也便于今后的系統(tǒng)維護和擴展工作。通過這學期的學習,使我們對軟件開發(fā)平臺與工具有了更深入的了解。小組 分工式的作業(yè)給我們提供了很好的交流學習氛圍,讓大家能夠在交流中學習,在 學習中互相了解。但由于自己的水平和經(jīng)驗不足,還存在著一定的問題。還要繼 續(xù)努力,爭取獲得更大成績。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、定時器 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等.壓縮文件請下載最新的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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年12月樂至縣下半年公開引進急需緊缺專業(yè)人才(118人)筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025至2030年中國氣動工具殼體數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國橡膠機頭數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年毛滌花呢背心項目投資價值分析報告
- 護士合同續(xù)簽申請書
- 垃圾運輸時效保障合同
- 2025年防水金庫門項目可行性研究報告
- 綠色食品代理銷售合同樣本
- 2025年中國全自動三合一灌裝機組市場調(diào)查研究報告
- 二零二五年度葡萄園土壤改良與施肥技術(shù)合同4篇
- 人教版小學英語單詞表(完整版)
- 飛灰處置及資源化綜合利用項目可行性研究報告模板-備案拿地
- 2024年咨詢工程師考試大綱
- 免疫治療皮疹護理查房
- 小學六年級開學第一課課件二篇
- 2024年棉柔巾行業(yè)市場趨勢分析
- 黑龍江省哈爾濱市雙城區(qū)2024年八年級下冊物理期末經(jīng)典試題含解析
- 老年期譫妄課件
- 項目采購管理培訓
- 河道保潔服務(wù)日常巡邏方案及措施
- 《工業(yè)氣體泄漏氣云紅外成像檢測系統(tǒng)的性能評價技術(shù)規(guī)范》 征求意見稿
評論
0/150
提交評論