【VC++开源代码栏目提醒】:网学会员在VC++开源代码频道为大家收集整理了“屏幕保护系统 - 科学技术“提供大家参考,希望对大家有所帮助!
C课程设计报告 2009 -- 2010年度第 二 学期 屏幕保护程序的设计 专业 计算机科学与技术 学生姓名 班级 学号 指导教师 完成日期 2010年6月23日 C程序设计报告2010 目 录 1 概 述 ............................................................ 1 1.1 课程设计目的 ...................................................... 1 1.2 课程设计内容 ...................................................... 1 2 系统需求分析 ........................................................ 1 2.1 系统目标 .......................................................... 1 2.2 主体功能 .......................................................... 2 2.3 开发环境 .......................................................... 2 3 系统概要设计 ........................................................ 2 3.1 系统的功能模块划分 ................................................ 2 3.2 系统流程图 ........................................................ 2 4系统详细设计 ........................................................ 3 4.1 系统设计的思想 .................................................... 3 4.2 系统设计的框架 .................................................... 5 4.3 系统设计的步骤 .................................................... 3 5 测试 ................................................................ 4 5.1 测试方案 .......................................................... 4 5.2 测试结果 .......................................................... 5 6 小结 ................................................................ 5 参考文献 ............................................................. 7 附 录 .............................................................. 8 附录1 源程序清单 ..................................................... 8 C程序设计报告2010 1 屏幕保护程序设计 1 概 述 1.1 课程设计目的 1、巩固并加深学生对C语言程序设计知识的理解 2、培养学生面向对象的程序设计思想使学生认识面向过程和面向对象两种设计方法的区别 3、进一步掌握和应用
VC 6.0集成开发环境 4、提高运用C语言解决实际问题的能力 5、初步掌握开发小型实用软件的基本方法能独立设计、实现具有实际功能的小系统 6、掌握书写程序设计开发文档的能力。
1.2 课程设计内容 课题名称屏幕保护程序的设计 说明系统检测到一段时间内没有鼠标和键盘消息输入即空闲了一段时间时间长短可以设置时自动进入屏幕保护程序。
要求 1 通过控制面板的显示器控制可以设置屏幕保护程序的各种属性 2 使屏幕保护特征有效或无效 3 从一系列屏幕保护程序中选择喜欢的屏幕保护程序 4 配置和预览屏幕保护程序、指定空闲长度、设置屏幕保护口令。
2 系统需求分析 2.1 系统目标 我们知道屏幕保护程序的设计初衷是因为普通非液晶显示期是用阴极管发射电子来击打屏幕产生图像的如果长期固定在一个画面不动会对显示器造成损害所以操作系统设计者设计了屏幕保护程序来保护显示器等硬件在由于电脑暂时不操作显示器画面停滞而造成的对显示器的损害。
而今由于技术的成熟我们也赋予了屏幕保护程序在保护显示器之外更多的功能我们除了注重其实用价值外也更注重其的外观的美观新颖。
所以我们的系统目标就是设计一个屏幕保护程序当电脑闲置一段时间后会自动触发我们的屏幕保护程序。
我们在设计屏幕保护程序注重其实用性的同时也注重挖掘其外观的漂亮新颖的特质。
C程序设计报告2010 2 2.2 主体功能 1功能划分系统属性设置、屏幕主题选择、系统参数设置 2功能描述 系统设置通过控制面板的显示器控制设置屏幕保护程序的各种属性例如屏保是滚动的图片通过系统设置可以设置图片间的交替时间。
屏幕主题选择从一系列屏幕保护程序中选择喜欢的屏幕保护程序例如是滚动图片的屏保程序或者是动态flash动画。
系统参数设置使屏幕保护特征有效或无效以及配置和预览屏幕保护程序、指定空闲长度、设置屏幕保护口令。
2.3 开发环境 Visual C C-FREE 3.5 3 系统概要设计 3.1 系统的功能模块划分 图3-1屏幕保护程序对话框 屏幕保护程序有关的内容主要有 ●基于对话框的应用 ●屏幕保护程序的设计约定 ●得到屏幕的大小 ●制作全屏窗口 ●隐藏鼠标 ●简单的动画 ●对话框中的动态数据交换DDX ●滚动条下接列表编辑框和颜色对话框的应用 ●INI注册文件的操作 3.2 系统流程图 首先先设置好屏幕保护程序的各个属性例如时间的设置密码的设置然后是全屏窗口的设置。
接着判断鼠标和键盘是否有键入如果在规定的时间内没有键入就进行鼠标的隐藏活动再根据你所设置的动画进入屏幕保护程序。
否则屏幕保护程序结束。
流程图如图3-2所示。
C程序设计报告2010 3 4系统详细设计 4.1系统设计的思想 Windows应用程序scrnsvr.exe在Windows启动时自动装载或由用户在控制面板中激活测试时执行它利用Windows的钩子过程来监视键盘和鼠标的闲置行为并在用户设定的时间后启动。
屏幕保护程序启动后scrnsvr.lib的启动
代码将创建一个全屏的窗口。
用户要编制自己的屏幕保护程序就要提供screensaverProc屏幕保护消息函数和szAppName字符串变量。
此外资源文件序提供ID_APP标识符标识的图标不过这一图标只在屏幕保护程序作为一个独立程序运行时才有用。
4.2 系统设计的框架 屏幕保护程序的框架设计分为四部分对话框的设置空闲时间的设置鼠标隐藏的设置屏幕保护动画的设置。
当屏幕保护程序运行之前先设置好各项参数当触发屏幕保护程序则程序开始运行然后捕获是不是有键盘和鼠标的操作如果有则停止屏幕保护程序若是没有如果达到设置空闲时间以后则隐藏鼠标设置简单动画然后不断判断是否有键盘和鼠标动作触发。
图3-2 屏幕保护程序流程图 4.3 系统设计的步骤 1选择MFC AppWizardexeProject Name 为MyScreensaverNEXT对话框。
2打开菜单Project、Settings在Debug页、Executable for debug session项以及Link页中Output file name项改为c:windowsMyScreensaver.scr。
3手动清除Windows 目录下的垃圾文件。
可借助SafeClean 来帮你清除如果你的硬盘内存够大可以不用清除。
4用Class Wizard生成CMyWnd类其基类为CWnd在Base Class 中为generic CWnd。
5打开MyScreensaver.cpp修改InitInstance函数。
开始 C程序设计报告2010 4 6由计数器调用DrawBitmap函数切换图片注意下面两个函数中的IDB_BITMAP1dc.BitBlt中的有关数据依据你的bmp图片个数、尺寸、位置不同而不同。
7响应键盘、鼠标是屏幕保护程序不可缺少的在OnKeyDown、 OnLButtonDown、OnMButtonDown、OnRButtonDown、OnSysKeyDown函数中都加入PostMessageWM_CLOSE。
8在OnDestroy函数中删掉计时器KillTimerID_TIMER在CMyWnd::PostNcDestroy 中加入 deletethis 。
5 测试 5.1 测试方案 运行程序 1选择自己喜欢的动画进行设置如图 5-1所示。
C程序设计报告2010 5 图5-1选择动画 2对时间进行简单的设置。
图5-2设置屏幕保护程序的时间 5.2 测试结果 4分钟过后结果如图5-3由于手机拍摄不太清楚效果是有的结果也是正确的所以就接的这幅图 所示。
图5-3进入屏幕保护阶段 6 小结 C程序设计报告2010 6 C程序设计报告2010 7 参考文献 1王育坚. Visual C面向对象编程教程M. 北京: 清华大学出版社 2007.7. 2谭浩强. C面向对象程序设计M. 北京: 清华大学出版社 2008.2. 2谭浩强. C程序设计实践指导M. 北京: 清华大学出版社 2006.7. C程序设计报告2010 8 附 录 附录1 源程序清单 附录1.1头文件B14Dlg.h定义CB14Dlg类的定义。
class CB14Dlg : public CDialog DECLARE_DYNAMICCB14Dlg public: CB14Dlg public: virtual BOOL OnInitDialog public: virtual CB14Dlg static CB14Dlg sm_pTheConfigureDialog protected: virtual LRESULT WindowProcUINT uMsgWPARAM wParamLPARAM lParam virtual LRESULT DefWindowProcUINT uMsg WPARAM wParam LPARAM lParam afx_msg void OnNcDestroy afx_msg int OnCreateLPCREATESTRUCT lpCreateStruct //AFX_MSG DECLARE_MESSAGE_MAP inline CB14Dlg AfxGetScreenSaverDialog return CB14Dlg::sm_pTheConfigureDialog 附录1.2类执行文件B14Dlg.cpp实现B14Dlg类的功能。
//构造函数 CB14Dlg::CB14Dlg ASSERTsm_pTheConfigureDialog sm_pTheConfigureDialog this //析构函数 CB14Dlg::CB14Dlg sm_pTheConfigureDialog NULL //撤消窗口函数 void CB14Dlg::OnNcDestroy CDialog::OnNcDestroy C程序设计报告2010 9 //对话框初始化函数 BOOL CB14Dlg::OnInitDialog if AfxGetScreenSaverWnd AfxGetScreenSaverWnd-RestoreOptions return CDialog::OnInitDialog //对话框创建消息处理函数 int CB14Dlg::OnCreateLPCREATESTRUCT lpCreateStruct if CDialog::OnCreatelpCreateStruct -1 return -1 SetWindowPosCWnd::wndNoTopMost 0 0 0 0 SWP_NOMOVE SWP_NOSIZE return 0 //默认窗口过程确保消息能被处理 LRESULT CB14Dlg::DefWindowProcUINT uMsgWPARAM wParamLPARAM lParam return 0L //配置屏幕保护对话框函数 BOOL WINAPI ScreenSaverConfigureDialogHWND hDlg UINT uMsg WPARAM wParam LPARAM lParam //这里应该有一个CB14Dlg派生类的全局变量 ASSERTAfxGetScreenSaverDialog if AfxGetScreenSaverDialog return 0L if AfxGetScreenSaverDialog-m_hWnd AfxGetScreenSaverDialog-AttachhDlg LRESULT lResult if uMsg WM_INITDIALOG CDialog pDlg DYNAMIC_DOWNCASTCDialog CWnd::FromHandlePermanenthDlg if pDlg NULL lResult pDlg-OnInitDialog else lResult 1 else lResult AfxCallWndProc AfxGetScreenSaverDialog AfxGetScreenSaverDialog-m_hWnd uMsg wParam lParam C程序设计报告2010 10 if uMsg WM_NCDESTROY ASSERTAfxGetScreenSaverDialog AfxGetScreenSaverDialog-m_hWnd return lResult //注册屏幕保护对话框函数 BOOL WINAPI RegisterDialogClassesHANDLE hInstance return TRUE //消息处理函数它通过窗口消息映射表发送消息 LRESULT CB14Dlg::WindowProcUINT uMsg WPARAM wParam LPARAM lParam return CDialog::WindowProcuMsg wParam lParam 附录1.3 MFCSaver.cpp文件定义程序类行为 //消息映射函数 BEGIN_MESSAGE_MAPCMfcSaver CScreenSaverWnd //AFX_MSG_MAPCMfcSaver ON_WM_TIMER //AFX_MSG_MAP END_MESSAGE_MAP CMfcSaver theSaver CMfcSaverDlg theSaverDialog //构造函数 CMfcSaver::CMfcSaver m_nIcons 6 m_nSpeed 100 srandtimeNULL CMfcSaver::CMfcSaver //获取图标数目函数 int CMfcSaver::GetIconCount const return m_nIcons //设置图标数目函数 void CMfcSaver::SetIconCountint nIcons m_nIcons nIcons OnInitialUpdate C程序设计报告2010 11 //获取图标运动速度函数 int CMfcSaver::GetIconSpeed const return m_nSpeed //保存配置函数 void CMfcSaver::SetIconSpeedint nSpeed m_nSpeed nSpeed OnInitialUpdate //保存配置函数 void CMfcSaver::SaveOptions CString s s.Formatd GetIconCount ::WritePrivateProfileString MfcSaver Count s mfcsaver.ini s.Formatd GetIconSpeed ::WritePrivateProfileString MfcSaver Speed s mfcsaver.ini //保存选项函数 void CMfcSaver::RestoreOptions SetIconCount::GetPrivateProfileInt MfcSaver Count 8 mfcsaver.ini SetIconSpeed::GetPrivateProfileInt MfcSaver Speed 8 mfcsaver.ini //重载初始化函数 void CMfcSaver::OnInitialUpdate if m_hWnd return m_aIcon.RemoveAll if m_ilIcons.m_hImageList m_ilIcons.DeleteImageList m_aIcon.SetSizem_nIcons m_ilIcons.CreateIDB_ICONS 32 0 RGB128 0 128 int i for i 0 i m_nIcons i SetupMfcSaverIconi m_nSpeed max1 m_nSpeed SetTimer1 2000 / m_nSpeed NULL //重载绘图函数根据时间分配绘制图标 void CMfcSaver::OnDrawCDC pDC int i for i 0 i m_nIcons i EraseMfcSaverIconi pDC UpdateMfcSaverIconPositioni if IsMfcSaverIconOffscreeni C程序设计报告2010 12 SetupMfcSaverIconi DrawMfcSaverIconi pDC //遮盖图标函数使每次只显示一个图标 void CMfcSaver::EraseMfcSaverIconint i CDC pDC CRect rcIcon CRectm_aIconi.ptP CSize32 32 pDC-FillSolidRectrcIcon RGB0 0 0 //绘制图标函数 void CMfcSaver::DrawMfcSaverIconint i CDC pDC m_ilIcons.DrawpDC m_aIconi.iImage m_aIconi.ptP ILD_NORMAL //计时器消息处理函数更新屏幕 void CMfcSaver::OnTimerUINT nIDEvent CScreenSaverWnd::OnTimernIDEvent InvalidateFALSE //判断图标是否冲突函数 BOOL CMfcSaver::IsMfcSaverIconCollidingint i CPoint ptP CRect rcI CRectptP CSize32 32 int j for j 0 j m_nIcons j if j i continue CRect rcJ CRectm_aIconj.ptP CSize32 32 if rcJ.IntersectRectrcJ rcI return TRUE return FALSE //判断图标是否移出屏幕函数 BOOL CMfcSaver::IsMfcSaverIconOffscreenint i CRect rcI CRectm_aIconi.ptP CSize32 32 CRect rcC GetClientRectrcC return rcC.IntersectRectrcC rcI void CMfcSaver::UpdateMfcSaverIconPositionint i CPoint ptP ptP m_aIconi.ptP m_aIconi.szV if IsMfcSaverIconCollidingi ptP m_aIconi.nStuck BounceMfcSaverIconi if m_aIconi.nStuck 5 SetupMfcSaverIconi return C程序设计报告2010 13 m_aIconi.nStuck 0 m_aIconi.ptP ptP void CMfcSaver::BounceMfcSaverIconint i do m_aIconi.szV.cx rand 5 - 2 m_aIconi.szV.cy rand 5 - 2 while m_aIconi.szV.cx 0 m_aIconi.szV.cy 0 void CMfcSaver::SetupMfcSaverIconint i int count max1 m_ilIcons.GetImageCount int breakout 10 do m_aIconi.iImage rand count m_aIconi.ptP.x rand ::GetSystemMetricsSM_CXSCREEN m_aIconi.ptP.y rand ::GetSystemMetricsSM_CXSCREEN BounceMfcSaverIconi m_aIconi.nStuck 0 while breakout 0 IsMfcSaverIconCollidingi m_aIconi.ptP 附录1.4 ScreenSaverWnd.cpp实现屏保的启动和关闭 IMPLEMENT_DYNAMICCScreenSaverWnd CWnd //消息映射定义 BEGIN_MESSAGE_MAPCScreenSaverWnd CWnd //AFX_MSG_MAPCScreenSaverWnd ON_WM_CREATE ON_WM_ERASEBKGND ON_WM_PAINT ON_WM_PALETTECHANGED ON_WM_QUERYNEWPALETTE END_MESSAGE_MAP / static / CScreenSaverWnd CScreenSaverWnd::sm_pTheScreenSaver NULL //构造函数初始化成员变量 CScreenSaverWnd::CScreenSaverWnd sm_pTheScreenSaver this m_bAutoBlack TRUE m_pPalette NULL //析构函数 CScreenSaverWnd::CScreenSaverWnd sm_pTheScreenSaver NULL C程序设计报告2010 14 //创建消息处理函数将屏幕保护窗口设置为最上层属性 int CScreenSaverWnd::OnCreateLPCREATESTRUCT lpCreateStruct if CWnd::OnCreatelpCreateStruct -1 return -1 ifdef _DEBUG SetWindowPosCWnd::wndNoTopMost 0 0 0 0 SWP_NOMOVE SWP_NOSIZE endif RestoreOptions OnInitialUpdate return 0 //刷新窗口函数每次以背景色清除窗口 BOOL CScreenSaverWnd::OnEraseBkgndCDC pDC if m_bAutoBlack CRect rcClient GetClientRectrcClient pDC-FillSolidRectrcClient RGB0 0 0 return TRUE //重画函数在屏幕上绘制图形 void CScreenSaverWnd::OnPaint CPaintDC dcthis if m_pPalette dc.SelectPalettem_pPalette FALSE dc.RealizePalette OnDrawdc //获取调色板信息函数 CPalette CScreenSaverWnd::SetPaletteCPalette pPalette CPalette pOldPalette m_pPalette m_pPalette pPalette OnQueryNewPalette return pOldPalette BOOL CScreenSaverWnd::OnQueryNewPalette if m_pPalette return FALSE CClientDC dcthis dc.SelectPalettem_pPalette FALSE UINT uChangeddc.RealizePalette return TRUE void CScreenSaverWnd::OnPaletteChangedCWnd pFocusWnd C程序设计报告2010 15 if pFocusWnd this return OnQueryNewPalette BOOL CScreenSaverWnd::IsAutoBlack const return m_bAutoBlack void CScreenSaverWnd::SetAutoBlackBOOL bAutoBlack / TRUE / m_bAutoBlack bAutoBlack //终止屏幕保护程序函数 LRESULT CScreenSaverWnd::WindowProcUINT uMsg WPARAM wParam LPARAM lParam return CWnd::WindowProcuMsg wParam lParam LRESULT CScreenSaverWnd::DefWindowProcUINT uMsg WPARAM wParam LPARAM lParam return ::DefScreenSaverProcm_hWnd uMsg wParam lParam //开始屏幕保护程序函数 LRESULT WINAPI ScreenSaverProcHWND hWnd UINT uMsg WPARAM wParam LPARAM lParam return 0L if CScreenSaverWnd::sm_pTheScreenSaver-m_hWnd AfxWinInitHINSTANCE::GetWindowLonghWnd GWL_HINSTANCE NULL SW_SHOWNORMAL CScreenSaverWnd::sm_pTheScreenSaver-AttachhWnd LRESULT lResult ::AfxCallWndProc CScreenSaverWnd::sm_pTheScreenSaver CScreenSaverWnd::sm_pTheScreenSaver-m_hWnd uMsg wParam lParam if uMsg WM_NCDESTROY ASSERTCScreenSaverWnd::sm_pTheScreenSaver CScreenSaverWnd::sm_pTheScreenSaver-m_hWnd AfxWinTerm return lResult
上一篇:
飞狐公式源码
下一篇:
科研管理杂志简介