为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

MFC编写屏幕保护

2012-03-27 3页 doc 31KB 29阅读

用户头像

is_119383

暂无简介

举报
MFC编写屏幕保护 用MFC编制屏幕保护程序 作者:Ed Halley. 翻译:Yu Hail 1998 编写屏幕保护 现代显示器的很多优点,如长寿命的显示屏,液晶和能源之星能源保护模式, 已经让屏幕 保护程序的作用大大地降低. 但是,依然有大量的屏幕保护程序出现,尤其是共享软件. 这也许是因为写屏幕保护程序是一件非常有趣的事. 因为有CRect和CGdiObject类,这些 类的绘图功能比单纯的C API函数容易得多, 所以,用MFC写屏幕保护程序会是一件更有趣 的事. 简单地和"Hello, world."应用程序比较,它不需要WinMai...
MFC编写屏幕保护
 用MFC编制屏幕保护程序 作者:Ed Halley. 翻译:Yu Hail 1998 编写屏幕保护 现代显示器的很多优点,如长寿命的显示屏,液晶和能源之星能源保护模式, 已经让屏幕 保护程序的作用大大地降低. 但是,依然有大量的屏幕保护程序出现,尤其是共享软件. 这也许是因为写屏幕保护程序是一件非常有趣的事. 因为有CRect和CGdiObject类,这些 类的绘图功能比单纯的C API函数容易得多, 所以,用MFC写屏幕保护程序会是一件更有趣 的事. 简单地和"Hello, world."应用程序比较,它不需要WinMain()函数,例如: 如果你发掘一下有哪些API函数支持产生一个屏幕保护程序,你会发现可利用的函数非常 少. 例如:用C写屏幕保护程序,大多数情况下都不需要调用DefWindowProc函数,取而代之 的是DefScreenSaverProc函数. 如果调用你自已的函数(一般也就是三个),你可以编出一 个和标准的屏幕保护程序功能一样的屏保程序. 对所有的屏幕保护程序: 屏幕保护程序的名字和描述在字符串1中定义. 屏幕保护程序的图标为ID_APP, 在中定义为100. WINAPI函数ScreenSaverProc必须定义和调用. (CScreenSaverWnd模块为你填充这个API调用.) 程序必需以.SCR为扩展名. 对于可设置的屏幕保护程序: 设置屏幕保护程序的对话框为DLG_SCRNSAVECONFIGURE,在定义为2003. WINAPI函数ScreenSaverConfigureDialog必须被定义和调用. WINAPI函数RegisterDialogClasses必须被定义和调用. (CScreenSaverDlg模块为你填充这个API调用.) 某些MFC外部特性 所有这些简单的特性来源于MFC,以及它便利的应用程序框架. 一个屏幕保护程序并不真 的是一个应用程序,它只不过是操作系统在你离开键盘后才调用的一段代码. 它甚至不需 要WINMAIN函数,MFC程序似乎不可能完成这一点,因为它已经调用了WINMAIN函数. 如果你 没有用过WINAPI来编写C程序,你可能不知道MFC已经在幕后调用了DefWindowProc过程. 你当然能用MFC来生成一个屏幕保护程序,对于上述的限制,你只要在MFC的基础上做一点 点工作即可. 以下提供两个抽象类 CScreenSaverWnd和CScreenSaverDlg,它会考虑这种 限制,并且让你很容易创建一个功能完全的屏幕保护程序. 建一个基于对话框的MFC应用程序. 使用VC4.2或5.0为屏幕保护程序产生一个新工程,你可以使用开发环境提供的AppWizard , 建立一个新"Win32 MFC Application"程序.如果你选择链接时MFC为共享(linked wit h MFC in a shared DLL), 屏幕保护程序会小很多.当然,基于对话框的应用程序将会避 免产生不需要用DOC/VIEW构架. 删除所以关于CWinApp的引用和它本身. 删除所有CWinApp派生类的申明和定义,包括一个全局的instance. 产生一个CWnd的派生类. 我们已经创建了一个基于对话框的应用程序,但是屏幕保护程序只是需要一个简单的CWn d派生类. 你可以使用ClassWizard来产生一个继承于 generic CWnd class的派生类. 选择父类. 从下载的文件中拷贝CScreenSaverWnd和CScreenSaverDlg的相关文件,*.CPP和*.H (作者 要求你能保留源代码中的版权信息). 在你的窗口类中查找CWnd,将其换成CScreenSaver Wnd,将CDialog换为CScreenSaveDlg. 然后重新编译. 一个特定的对话框. 用ClassWizard产生的CDialog的派生类,没有处理命令行参数的构造函数. 因为屏幕保护 程序的设置部分是一个窗口,需要命令行设置, 因此,在此提供了一个可以使用命令行的 构造和析构函数. 全局考虑. 当删掉CWinApp的派生类对象时,也同时删掉了全局的instance, 因此,程序中CScreenSa verWnd的派生类需要有一个全局的instance. 同样,在CScreenSaverDlg的派生类中也要 保留一个副本. 资源. 如前所述,屏幕保护程序包含以下资源: 字符串1中的描述,不要超过20个字符,当用户选 择屏幕保护程序时,在下拉框中就会出现这个字符串.将图标资源的ID改为100.将对话框 资源的ID改为2003. 泡沫,清洗,重复. 你已经做好一个框架,现在可以编译,调试和开发了. 你可以改变工程输出的文件扩展名 为.SCR,从而能出现屏幕保护程序的设置对话框. 如果你想调试屏幕保护程序,在运行时 你可以用命令行参数:"/save" 虽然CScreenSaverWnd不是CView的派生类,我觉得应该重载OnInitialUpdate和OnDraw. 我也加入了三个特性,你可以使用,也可以不使用. CScreenSaverWnd的默认状态是黑屏,这由函数OnEraseBkgnd()来完成,你可以在构造函数 ,OnCreate,OnInitalUpadte这三个地方的任一处调用SetAutoBlack(FALSE)来关掉该项. 成员变量m_pPalette指向CPalette,将被用于OnDraw调用之前的调色板设置, 重载OnQue ryNewPalette()和OnPaletteChanged()来正确地处理调色板, 将m_pPalette设置为NULL ,意味着所有的调色板操作代码都由你自已来完成. (注意:使用16色时(如示例),你不需 要做任何调色板的工作). 虽然屏幕保护程序的设置对话框和屏幕保护程序不可能同时出现,但它们确实需要通讯.  重载SaveOptions和RestoreOptions将用来保存和恢复各项参数. 在什么地方保存这种 参数取决于你,但保留在系统注册表中是个不错的选择. 以下是上述两个类的框架,源程序已经很好地做了注解. // Implemented class CScreenSaverWnd class CScreenSaverWnd : public CWnd { public:     CScreenSaverWnd(); // Attributes public:     BOOL IsAutoBlack() const;     void SetAutoBlack(BOOL bAutoBlack = TRUE);     CPalette* GetPalette() const;     void SetPalette(CPalette* pPalette); // Overridables public:     virtual void OnDraw(CDC* pDC);     virtual void OnInitialUpdate();     virtual void SaveOptions();     virtual void RestoreOptions(); //Implementation public:     virtual ~ScreenSaverWnd(); protected:     virtual LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam); virtual LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);     afx_msg BOOL OnEraseBkgnd(CDC* pDC);     afx_msg void OnPaint();     afx_msg BOOL OnQueryNewPalette();     afx_msg void OnPaletteChanged(CWnd* pFocusWnd); }; // Implemented class CScreenSaverDlg class CScreenSaverDlg : public CDialog { public:     CScreenSaverDlg(); // Overrides public:     virtual BOOL OnInitDialog(); //Implementation public:     virtual ~ScreenSaverDlg(); protected:     virtual LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);     virtual LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT uMsg,                                WPARAM wParam, LPARAM lParam); BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg,                                        WPARAM wParam, LPARAM lParam); BOOL WINAPI RegisterDialogClasses(HANDLE hInstance); };
/
本文档为【MFC编写屏幕保护】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索