版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程名称: 软件开发平台与工具 任课教师: 姓 名: 学 号: 1. 引言1.1. 课程设计项目1.2. 背景简介从编程之初,便免不了和方法,类,接口之类的东西打交道。久而久之,自然会对此进行总结,由此而产生了开发平台。而今中国的程序员之中,有很大一部分都是编一些企业MIS、政府MIS之类的程序。其主要工作就是对数据进行一下增删改查的操作,对MIS系统做一些基础的管理而已。软件开发平台有两种平台模式:一种是传统的C/S架构模式,一种是现在流行的B/S架构模式。B/S架构模式是随着互联网的流行,自然又要求以互联网为基础,把这些都网络化,以实现网络资源共享,而不是传统的单机模式。这便激
2、发了软件开发者的创造力,形成了软件开发平台的B/S架构模式(web开发平台)。对于web开发平台,我的个人理解是:1.以web2.0为基础,基于互联网的B/S架构的软件。它本身也是一个软件,只不过不是最终的软件产品,而是用于二次开发的软件。2.用于实现各类业务系统,如CRM、MIS、ERP、HIS、OA等等的开发。web开发平台本身就是一个二次开发平台,他不同于诸如eclipse等这样的开发工具,需要写大量的代码来完成各个业务模块,二次开发平台只需要设计好自己的数据结构,进行一些简单的配置、拖拉等操作就可以完成业务系统的开发。3.能够快速的实现各种报表包括复杂的图表报表的设计制作,传统的编码式
3、开发需要自己去编写想要的各种报表,而运用开发平台就简单多了,可以很轻松的配置出各种报表。使用web开发平台的目的是为了实现资源共享、节约开发成本、提高开发效率、缩短开发周期。而如今的开发平台大都采用非编码的方式或者是极少编码的方式,这样正好达到了目的。有的甚至可以减少80%的代码量,可见效率会提高多少。从国内代表性的软件开发平台中1,我们可以看出这一类产品的大致脉络,亚思捷的TNT平台:TNT平台的核心优势在于低成本的个性化,他可以同时向客户提供T业务系统模板,即OA、CRM、文档管理、信息门户、在线考试等标准化的应用系统;N开源组件包,即上述应用系统的源代码;T开发工具,即基于微软Jupit
4、er平台的快速开发工具,开发者可以通过界面属性设定的方法来完成对业务系统的快速开发,自动化生成C#和JAVA的二种语言的系统。显然,TNT中的两个“T”是业务的重点,而杀手锏则是低价。其他厂家的软件开发平台与上述三种均大同小异,都是提供“标准化+行业化+个性化”的应用模式。从中我们看出,这些软件开发平台确实都非常具有我们在上文中提到的技术共性,另外我们还都具有一个共同点,那就是他们既提供软件开发平台,又提供基于该平台生成的各种应用系统,两种产品相辅相成。这种模式也是软件开发平台销售的主流模式。1.3.相关概念Unified Modeling Language (UML)又称统一建模语言或标准建
5、模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的
6、软件开发的全过程。1.4.编写目的经过本学期对软件开发平台与工具的学习,对其进行初步的掌握,通过课程设计(音乐播放器)编程,对所学内容进行实际应用并发现学习中存在的问题,也是对自己学习工作的检验和测试,在撰写报告的过程中能够更深刻的了解软件开发平台与工具的理念通过这份文档来记录实践过程中遇到的问题以及改善的方法。现在对整个过程加以认识、记录和总结,留下经验,汲取教训。为以后的其他工作积攒经验,为以后遇到相同的问题和从事类似项目奠定坚实的基础,以便以后有资可寻、有底可查,增长个人见识。2部分产品代码解析2.1简介本音乐播放器使用visual C+6.0自带的Active Movie Contro
7、l Object控件,来建立自己的多媒体播放器。并以千千静听为模板,实现播放器最小化托盘的功能。Active Movie Control Object 微软公司推出的ActiveMovie控件用于多媒体程序设计的控件,该控件提供非常完善的音频和视频媒体文件的播放功能。其能支持多种文件格式:例如最常见的WAV文件、AVI文件、MPEG压缩格式的VCD视频文件等,它都可以正常地进行播放。这个控件可根据文件的后缀名自动判别设备的类型,滞后能完成相应的控制。因为本实例需要提供多媒体支持,所以使用Active Movie控件是很好的一个选择。 事实上,很多优秀的多媒体应用程序,其内部的多媒体播放就是利用
8、Active Movie控件来实现。通过这个控件用户只需要精心地设计应用程序的用户界面,就可以开发出功能齐全、外观漂亮、具有相当水准的媒体播放器。1. Active Movie的注册方法现在使用的VC+6.0自带Active Movie控件版本一般都是Active Movie3。用户注册这个控件之前,再VC+6.0集成开发环境中是无法找到Active Movie3控件的。所以应首先注册这个控件。步骤及方法为:(1) 单击“开始”|“运行”按钮。(2) 在弹出的对话框中输入“regsvr32 msdxm.ocx”。(3) 在VC+6.0的集成开发环境候中的菜单栏下执行如下操作“”Project-
9、>Add to Project->Components and Controls->Registered ActiveX Controls”将弹出空间添加对话框,选择其中的ActiveMovieControl Object,Inser,单击OK按钮。(4) 将空间拖放到对话框上。2. ActiveMovie的属性及方法(1) ActiveMovie的特有属性CurrentState:指示控件的状态(stopped、paused、running)DisplayMode:显示模式(时间方式、帧方式)FileName:指定该控件要操作的源文件的完整名字Rate:指示媒体流的回放率R
10、eadyState:指示控件状态,是否已经装入源文件SelectionStart:指示播放媒体流的开始位置SelectionEnd:指示播放媒体流的结束位置CurrentPosition:指示播放媒体流的当前位置Volume:设置音量(2) ActiveMovie的方法ActiveMovie控件常用的方法有RUN/STOP/PAUSE这3个。分别控制流媒体的播放、停止和暂停。使用时直接调用它们即可。其他与通用方法如Drag、Move、SetFocus等,该控件也支持。此外ActiveMovie还有一些特有事件的处理方法。DisplayModeChange:当DisplayMode属性值发生变化
11、时触发OpenComplete:当源文件完全载入时触发PositionChange:当流媒体的当前位置改变时触发ReadyStateChange:当控件的ReadyState属性值改变时触发StateChange:当播放器的状态改变时触发Error:处理控件的出错事件 此外ActiveMovie控件还有一些属性操作方法,通过这些方法获取或者设置ActiveMovie控件的各个属性值。ActiveMovie获取属性值的方法如下:GetCurrentPosition:获取播放器的播放进度GetAuthor:获取作者信息GetBalance:获取声音平衡值GetFileName:获取操作的源文件的完
12、整名字GetDisplayMode:获取当期显示模式GetRate:获取媒体流的回放率GetVolume:获取当前音量2.2音乐播放器最小化到托盘的实现方法当前流行的播放器大大多都支持最小化到托盘事件ain.suoyi本播放器也仿照这些播放器实现这个功能。1.最小化到托盘的基础把应用程序最小化到托盘的基本原理就是将应用程序的主窗体隐藏,然后在托盘中绘制应用程序的图标。Shell_NotifyIcon()函数负责向系统传递消息,以添加、修改或删除托盘区的图标。它的原型如下:WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNO
13、TIFYICONDATA pnid);该函数返回的是一个布鲁尔值,失败则返回0,返回非0则成功。函数有以下两个参数。(1)dwMessage:标示该函数的应用功能,是添加、删除,还是修改图标。如果是添加,则它的值为NIM_ADD;如删除则是NIM_DELETE;而修改则是NIM_MODIFY。 (2)pnid:程序最小化到托盘的图标信息结构体 2.实现最小化托盘 最小化按钮及Hide按钮处理函数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");/信息提示条为“计划任务提醒” Shell_NotifyIcon(NI
15、M_ADD,&nid);/在托盘区添加图标 ShowWindow(SW_HIDE);/隐藏主窗口 最小化到托盘的图标ID为IDR_MAINFRAME。它的消息为WM_MUSICPLAYEAR。当鼠标移过图标时提示信息为“MusicPlayer”3.处理托盘图标消息添加最小化到托盘图标发送的自定义消息WIN_MUSICPLAYER的映射。ON_MESSAGE(WM_MSICPLAYER,OnShowMusicPlayer)添加它的处理函数为OnShowMusicPlayer(),代码如下:LRESULT CMusicPlayerDlg:OnShowMusicPlayer(WPARAM w
16、Param, LPARAM lParam)if(wParam!=IDR_MAINFRAME) return 1; switch(lParam) case WM_RBUTTONUP:/右键起来时弹出快捷菜单,这里只有一个“关闭” LPPOINT lpoint=new tagPOINT; :GetCursorPos(lpoint);/得到鼠标位置 CMenu menu; menu.CreatePopupMenu();/声明一个弹出式菜单 /增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已 /隐藏),将程序结束。 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总结软件开发平台是一种软件开发工具,以通用技术架构为基础,集成常用建模 工具、二次开发包、基础解决方案等而成。软件开发工具是很方便地把一种编程 语言代码化并编译执行的工具。现在的软件开发工具逐渐显出智能化、网络化、 一体化、标准化的趋势。对于很多
19、企业来说,软件开发平台只被定义为信息化工 具,但成功进行过企业信息化建设的 CIO 们会对软件开发平台有着更为正确的 理解,那就是软件开发平台不仅是信息化工具,更是管理思想的沉淀。随着在企业中发挥出的作用被逐步肯定, 目前软件开发平台在国内信息化领 域也占据着越来越重要的位置, 其应用已经成为一种趋势。 相对于传统开发模式, 许多软件开发平台具有很多显著优势,包括优化产品基础架构,提升软件开发质 量;减少编码率,提高开发效率,提升开发的灵活性;可以充分关注客户需求, 实现按需定制;实现配置组件的标准化,提升产品稳定性和兼容性;提升企业开 发能力, 降低后期维护的时间和成本等, 可以使开发者有更
20、多时间关注客户需求, 在项目的需求、设计、开发、测试、部署、维护等各个阶段均可提供强大的支持。 这些都使得,软件开发平台在企业眼中成为非常给力的信息化工具。软件开发特别是大型软件是一项浩大的工程,需要几个人、十几个人、几十 个人甚至几百个人合作开发几个月、十几个月甚至几年。要保证系统的协调性、 统一性和连续性,就需要在开发之前制定严格、详细的开发规范。开发规范的制 定需要花费一定的时间和精力,但是"磨刀不误砍柴功",它相当于把今后开发过程 中开发人员都要遇到的问题提前做了一个考虑。有了开发规范,在后续的开发过 程中,设计人员就不必每次考虑如何为一个字段命名,编程人员也不必去
21、想某个程 序的结构和布局应当 怎样,测试人员也有了判断程序对错的标准。开发规范在项 目开发工作中起着事前约定的作用,需要所有开发人员共同遵守。它约束开发人 员的行为和设计、编程风格,使不同子系统和模块的设计、编程人员达成默契,以 便形成整个系统的和谐步调和统一风格,也便于今后的系统维护和扩展工作。通过这学期的学习,使我们对软件开发平台与工具有了更深入的了解。小组 分工式的作业给我们提供了很好的交流学习氛围,让大家能够在交流中学习,在 学习中互相了解。但由于自己的水平和经验不足,还存在着一定的问题。还要继 续努力,争取获得更大成绩。4产品完整代码/ 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("状态: 播放 - Repeat");break;case 2:str.Format("状态: 暂停 - Repeat");break;case 3:str.For
46、mat("状态: 播放 - Repeat");break;elseswitch(m_state)case 1:str.Format("状态: 播放 - No Repeat");break;case 2:str.Format("状态: 暂停 - No Repeat");break;case 3:str.Format("状态: 停止 - 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);/设置
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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年研究生考试考研英语(二204)试卷及答案指导
- 代理采购业务协议范本2024
- 2024年股权转让及权益变更协议
- 2024年度中药材种植种子销售协议
- 2024批量门禁设备购销协议样本
- 2024年不动产即售协议模板
- 2024建筑泥水工施工分包协议范本
- 2024年度砌砖物流服务协议条款
- 2024商业用电供应协议
- DB11∕T 1709-2019 装配式建筑设备与电气工程施工质量及验收规程
- 2024年计算机二级WPS考试题库380题(含答案)
- 2024中国邮政集团江苏分公司春季招聘高频500题难、易错点模拟试题附带答案详解
- 道德与法治学科成绩提升计划
- 2022-2023学年北京市西城区德胜中学八年级(上)期中数学试卷【含解析】
- 病历书写基本规范细则
- 高校廉政课件
- 22G101三维彩色立体图集
- 装修工人简历范文
- 工作任务委托书
- 知道网课智慧树《文化考察(西安工程大学)》章节测试答案
- 生物制剂在肾病综合征中的应用和思考
评论
0/150
提交评论