19CMFC课程设计之屏幕保护程序_第1页
19CMFC课程设计之屏幕保护程序_第2页
19CMFC课程设计之屏幕保护程序_第3页
19CMFC课程设计之屏幕保护程序_第4页
19CMFC课程设计之屏幕保护程序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大学C+面向对象课程设计报告此报告源代码下载地址院(系): 计算机工程学院 专业: 软件工程 学生姓名: 班级: 学号: 题目: 屏幕保护程序 起迄日期: 2011.07.05 2010.07.14 设计地点: 指 导 教 师: 完成日期: 2011 年07月14日目录一、 课程设计目的5二、 课程设计内容与实现的功能51.设计内容52.实现的功能5三、 系统分析与设计51.系统分析52.系统设计5 2.1模块设计6 2.2数据结构说明6 2.3算法流程图6四、系统调试与调试分析7 1.系统测试7 2.调试分析9五、用户手册9六、程序清单11七、体会与评价14八、参考文献14九、课程设计评价1

2、514一、 课程设计目的现代显示器的很多优点,如长寿命的显示屏,液晶和能源之星能源保护模式,已经让屏幕保护程序的作用大大地降低.但是,依然有大量的屏幕保护程序出现,尤其是共享软件.这也许是因为写屏幕保护程序是一件非常有趣的事.用MFC写屏幕保护程序会是一件更有趣的事. 通过课程设计,实际掌握面向对象的程序设计方法,了解C+面向对象的设计方法与技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养自己分析实际问题和解决问题的能力,使学生具备使用面向对象程序设计开发工具设计实际系统的能力。 当然,屏幕保护程序现在也是形式多样,各有千秋。为了实现屏保的优点,我选择VC开发平台,MFC框架工

3、具制作一个适合于大众的使用的屏保,并且使用起来方便,简单易学。二、 课程设计内容与实现的功能1、 课设内容:屏幕保护程序是一种特殊的Windows应用程序。当系统检测到一段时间内没有鼠标和键盘消息输入(即空闲了一段时间,此长度可以设置)时就自动进入屏幕保护程序,以避免长时间显示静止画面而引起荧光体损坏,以及删除留在屏幕上的敏感信息。一旦有鼠标或键盘输入,就自动关闭屏幕包含程序。2、 实现功能:(1).可以用图片作为屏保(2).屏保图片沿着对角线方向移动(3).在屏保的任意位置添加文字(4).屏保文字可以沿着一定的方向移动(5).当按键、移动鼠标(移动超过100像素)或者触碰鼠标时,屏保自动关闭

4、(6).屏保添加了音乐三、 系统分析与设计1、系统分析屏幕保护程序制作出来之后比较简单,只要对程序进行操作即可,不需要其他什么功能,因为它只是一个用于保护屏幕图片的不断的移动。此外在程序的执行过程中,为了实现屏保,我只建立了基于对话框的两个类:CMyApp类和CMyDlg类,CMyApp类只是为了系统在调用屏保时,对信号的识别,选择屏保时,不至于运行:在预览时,才能进行全屏显示。CMyDlg类中的函数,主要是图片的载入、声音的载入、图片的循环显示、文字的显示、消息的响应和程序结束后对计时器的销毁。 对于这个拼图小游戏的逻辑结构:(1)需要对不同的消息进行响应(2)计时器的实现用于图片的移动(3

5、)系统调用屏保时,对信号的识别。2、系统设计:系统设计方案设计的屏幕保护程序只是一个“.scr”的程序,用户可以在系统中进行调用,按任意键结束屏保。屏保中有图片和音乐,用户可以不必只看单调的图片,听着清新的音乐更加怡情。在屏保运行时,音乐会自动开始播放,用户如果不喜欢听,可以自己更换歌曲,只要把音乐改成对应的名字即可,不过必须要是“.wav”格式的。运行之后,用户就可以看到美观流畅的屏幕保护程序和清新的音乐了。2.1、模块设计:本程序共有六个模块:画图模块、销毁计时器模块、设置窗口模块、关闭屏保模块、建立位图模块和计时器模块。2.2、数据结构说明:无抽象数据类型,只用到一些简单的类型和变量。U

6、INT gaodu;显示屏的高度UINT kuandu;显示屏的宽度UINT xianshi_x;图像要显示的位置x(从左到右的坐标) UINT xianshi_y; 图像要显示的位置y(从上到下的坐标) CDC* m_weitu;位图内存,也就是和雨图关联的内存,CBitmap weitu;雨位图2.3、算法流程图:屏幕保护程序实现过程:屏幕保护程序结束过程:四、系统测试与调试分析1、系统测试l 测试方法:黑盒l 测试技术:功能测试l 测试数据:按键盘、移动鼠标或者触碰鼠标,测试屏保是否结束。l 测试报告:测试结果良好,输入数据时,屏幕保护程序均能结束。l 功能测试应用背景:在WIN xp以

7、及WIN7 系统下测试说明测试名称屏幕爆出程序测试目的测试屏保在输入变量时结束测试技术功能测试测试方法黑盒测试法测试用例测试内容屏保是否在输入变量时结束测试步骤输入键盘信息输入鼠标信息输入鼠标信息测试数据按下任意键移动鼠标按下鼠标预期结果关闭屏保关闭屏保关闭屏保测试结果与预期相符与预期相符与预期相符测试前:测试后:三次测试方法,得到的结果均为以上截图,当输入变量是,屏保就会结束,回到桌面,测试结果与预期相同。2、调试分析:在调试过程中遇到的问题及解决方案:1)功能太少,添加了屏保的背景音乐,以及可以实现循环显示图片。 2)简单的屏保,可是却比系统的屏保还要大,代码不够精简,经过精简,程序的占用

8、空间大大缩小,代码更精简。3)未实现3D的屏保效果,现阶段短时间内还无法实现,以后的学习过程中会加强锻炼,不断的学习,使程序的功能更加完善。对完成后的程序的看法与讨论:这个屏幕保护程序总体来说实现了基本的功能,这个程序的特色是可以在运行时自动放出音乐,以及图片可以循环移动,流畅的移动。但是还可以提高,可以添加3D的效果,或者实现多图片的流畅随机移动。 五、用户手册1、使用平台VC+6.02、未安装VC6的用户,可以直接将程序文件拷贝到自己电脑上,然后打开“雨屏幕保护.scr”即可使用;安装VC6的用户可以把项目文件拷贝到电脑上之后依次执行打开项目文件“雨屏幕保护.dsw”即可使用。3、说明如何

9、使用你编写的程序,详细列出每一步的具体操作步骤。这里可以有适当的运行结果抓图。本程序为屏幕保护程序,程序的特点就是简单易懂,便于操作,所以用户可以直接点击程序文件即可实现操作,或者把程序文件和程序音乐放在C:WindowsSystem32,然后鼠标在桌面右击选择属性,进入屏幕保护选择,选择改程序文件名,设定屏保时间,即可以实现操作。屏保可以实现循环的移动,移动过程如以下截图:六、程序清单void CMyDlg:huatu()CClientDC dc(this);CDC dcweitu;CBitmap bitmap;bitmap.CreateCompatibleBitmap(&dc,kuandu

10、,gaodu);/创建位图kuandu,gaodu为屏幕的宽度和高度dcweitu.CreateCompatibleDC(&dc);dcweitu.SelectObject(&bitmap);dcweitu.SetBkMode(0);dcweitu.FillRect(&CRect(0,0,kuandu,gaodu),&CBrush(RGB(0,0,0); /设置背景为黑色 UINT y = (gaodu-weitu_h)/2;/将要显示的图片部分拷贝到内存dcweitu.StretchBlt(0,y,kuandu, weitu_h, m_weitu, xianshi_x,xianshi_y,k

11、uandu,weitu_h-12, SRCCOPY);CFont font; dcweitu.SelectObject(&font);static long l = kuandu;l-;if(lkuandu-gaodu)dcweitu.SetTextColor(RGB(0,100,255); dcweitu.TextOut(l-1100,40,班级:软件091); dcweitu.TextOut(l-900,40,学号:200907174); dcweitu.TextOut(l-700,40,制作人:邵伟);Else l = kuandu;dc.BitBlt(20,0,kuandu,gaodu

12、,&dcweitu,0,0,SRCCOPY);/显示在屏幕上bitmap.DeleteObject();void CMyDlg:OnDestroy() CMyDlg:OnDestroy();/ TODO: Add your message handler code heredelete m_weitu;KillTimer(1);/程序中用到了计时器。这里关掉计时器BOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();SetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set

13、 small iconCRect m_rcMain; /设置全屏窗口LONG style = GetWindowLong(m_hWnd,GWL_STYLE); style &= WS_CAPTION; SetWindowLong(m_hWnd,GWL_STYLE,style); /设置显示窗口状态 kuandu=GetSystemMetrics(SM_CXSCREEN); /获得显示器屏幕的宽度 gaodu=GetSystemMetrics(SM_CYSCREEN); /获得显示器屏幕的高度 SetWindowPos(NULL,-23,-3,kuandu+27,gaodu+6,SWP_NOZO

14、RDER);/展示窗口:GetCursorPos(&shubiao_p);/获得鼠标的位置ShowCursor(FALSE);/隐藏鼠标return TRUE; void CMyDlg:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call defaultPostMessage(WM_CLOSE);CDialog:OnKeyDown(nChar, nRepCnt, nFlags);void CMyDlg:OnLButtonDown(UINT n

15、Flags, CPoint point) / TODO: Add your message handler code here and/or call defaultPostMessage(WM_CLOSE);CDialog:OnLButtonDown(nFlags, point);void CMyDlg:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(abs(point.x-shubiao_p.x)=100 |abs(point.y-

16、shubiao_p.y)=100)PostMessage(WM_CLOSE);void CMyDlg:OnRButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultPostMessage(WM_CLOSE);CDialog:OnRButtonDown(nFlags, point);void CMyDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSen

17、dMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icon

18、dc.DrawIcon(x, y, m_hIcon);elseCPaintDC dc(this); m_weitu = new CDC;weitu.LoadBitmap(IDB_BITMAP1);m_weitu-CreateCompatibleDC(&dc); /建立与dc兼容的m_weitu-SelectObject(&weitu);sndPlaySound( 雨屏幕保护.wav , SND_ASYNC | SND_LOOP );xianshi_x = 0;xianshi_y=0;huatu();SetTimer(1,1,NULL);CDialog:OnPaint();void CMyDlg

19、:OnTimer(UINT nIDEvent) /计时器,用于图片的流动显示/ TODO: Add your message handler code here and/or call defaultxianshi_x += 1;xianshi_y += 1;if(xianshi_x=weitu_w|xianshi_y=weitu_h) xianshi_x = 0; xianshi_y=0; huatu();CDialog:OnTimer(nIDEvent);BOOL CMyApp:InitInstance()AfxEnableControlContainer(); LPTSTR lpszAr

20、gv = _argv1; if(lpszArgv0=/) lpszArgv+; if(lstrcmpi(lpszArgv,_T(s)=0) CMyDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); return true; return FALSE;七、体会与自我评价不经意间,两周的时间已经过去了,课程设计也结束了,通过这两周的不懈努力,得到了自己想要的成果,对于一个初学者,这很有成就感,虽然只学到了一点皮毛,但我相信以后我会学到更多更多,通过不断的锻炼,会不断丰富我的阅历。通过编写屏幕保护程序,我了解了很多,要学会自学,学会查找自己的不足。对于一个一点不懂MFC的初学者,刚开始编写程序时,很有难度,仅有的了解也只是限于曾经用MF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论