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

做屏保

2011-09-10 5页 doc 28KB 36阅读

用户头像

is_202763

暂无简介

举报
做屏保函数中注册相应的窗口类! 除了要提供如上所述的三个必需函数以外,一个屏保程序还必须有一个图标,这个图标只能在屏保程序以standalone application形态运行时才可见.(译注:什么是standalone application呢???)这个图标资源在屏保源文件中必须以ID_APP为其ID,这个ID是在屏保库文件的Scrnsave.h文件中定义的. 最后一个必需做到的是一个屏保程序description string.屏保的源文件中必须包含一个字符串,(译注:估计这个字符串也是在屏保链接库中定义的)这个串是在屏保选择...
做屏保
函数中注册相应的窗口类! 除了要提供如上所述的三个必需函数以外,一个屏保程序还必须有一个图标,这个图标只能在屏保程序以standalone application形态运行时才可见.(译注:什么是standalone application呢???)这个图标资源在屏保源文件中必须以ID_APP为其ID,这个ID是在屏保库文件的Scrnsave.h文件中定义的. 最后一个必需做到的是一个屏保程序description string.屏保的源文件中必须包含一个字符串,(译注:估计这个字符串也是在屏保链接库中定义的)这个串是在屏保选择的那个地方用来显示对这个屏保的标示的.这个description string在资源文件中的字符串表中必须是第一个串(也就是说它的序号为1.) 如何调用屏保函数制作屏保程序 这个部分用从一个屏保程序中的示例代码来说明讲解下述几个任务: 创建一个屏保程序. 安装新屏保. 为屏保设置对话框添加Help功能. 下面先讲解如何创建一个屏保程序: 在从1到10的一个时间范围内,例子中的这个程序用下面四种颜色:白,浅灰,深灰,黑中的一种颜色来重绘屏幕.这个程序当接受到一个WM_TIMER消息时做重绘.用户可以用一个在该屏保设置对话框中的垂直滚动条来调整这个间隔时间. 屏保链接库: 这些静态的屏保函数是包含在一个屏保链接库中的.有两种可以使用的版本:Scrnsave.lib或者Scrnsavw.lib.在你的中你必链接其中的一个.Scrnsave.lib是用于使用ANSI字符集的程序,而Scrnsavw.lib用于UNICODE字符集的屏保程序.一个链接了Scrnsavw.lib的屏保程序只能运行在支持UNICODE的WINDOWS平台上.而链接了Scrnsave.lib的屏保程序可以运行在任何WINDOWS平台上. (译注:下面是示例程序,就不贴了,把我自己的程序贴上来就可以了) 因为我用的是笔记本电脑,我并不想用频繁重绘的屏保来损坏液晶屏,所以我打算写一个只显示一行静态文本的屏保程序,代码如下: #include #include #include #include "resource.h" #define TIMER_ID  1 LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {  static HDC hDC;  static HPEN hPen,hOldPen;  static CHAR str[100];  int    iLength;  switch (message){  case WM_CREATE:   SetTimer(hWnd, TIMER_ID, 500, NULL);   return TRUE;  case WM_TIMER:   hDC=GetDC(hWnd);   SetBkColor(hDC,RGB(0,0,0));   SetTextColor(hDC,RGB(255,0,0));   iLength=sprintf(str,"I can also make a ScreenSaver program for you!");   TextOut(hDC,350,200,str,iLength);   SelectObject(hDC, hOldPen);   DeleteObject(hPen);   ReleaseDC(hWnd, hDC);   return TRUE;  case WM_DESTROY:   KillTimer(hWnd, TIMER_ID);   return TRUE;  default:   return DefScreenSaverProc(hWnd,message,wParam,lParam);  }  return FALSE; } BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {  switch (message) {  case WM_INITDIALOG:   SetWindowPos(hDlg,HWND_NOTOPMOST,400,300,0,0,SWP_NOSIZE);   return TRUE;  case WM_COMMAND:   EndDialog(hDlg, LOWORD(wParam));   break;  }  return FALSE; } BOOL WINAPI RegisterDialogClasses(HANDLE hInst) {  return TRUE; } 需要注意的是: 1:在VC6中,要建一个Windows Application,而不是Windows Console Application. 2:要在Project->Settings->link中的Object/library modules中加入:scrnsave.lib (或者scrnsavw.lib). 3:对话框ID一定要设置为DLG_SCRNSAVECONFIGURE,图标的ID一定要设置为ID_APP.然后再找到New String Table这个图标,并在其中加入一个string:ID必须是IDS_DESCRIPTION,Caption可为任意. 4:在resource.h文件中一定要有#include这句. 5:在VC的Project->Settings->Link选项卡中可以设置输出的文件名,你可以将输出的文件名的后缀改为.scr,使它直接输出屏幕保护程序文件,而不必每次都费力地去改名。 6:如果你想在屏保中输出一副图片,可参考下面这段代码: LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {  HINSTANCE      hInstance ;  static HBITMAP hBitmap ;  static HDC hDC, hdcMem;  switch (message){  case WM_CREATE:   SetTimer(hWnd, TIMER_ID, 1000, NULL);   hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;         hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ;   return TRUE;  case WM_TIMER:   hDC=GetDC(hWnd);   hdcMem = CreateCompatibleDC (hDC);   SelectObject (hdcMem, hBitmap);   BitBlt (hDC,0,0,1024,768, hdcMem,0,0,SRCCOPY);   DeleteDC (hdcMem) ;   ReleaseDC(hWnd, hDC);   return TRUE;  case WM_DESTROY:   DeleteObject (hBitmap) ;   KillTimer(hWnd, TIMER_ID);   return TRUE;  default:   return DefScreenSaverProc(hWnd,message,wParam,lParam);  }  return FALSE; } 8:因为我将TIMER设置为1秒钟后才发WM_TIMER消息,所以只有在启动了屏保1秒之后才可以看到效果,那么如果我想在屏保一开始就看到输出的东西,该怎么做呢?应该可以在WM_CREATE中发送一个WM_TIMER消息给程序.我试了一下:  case WM_CREATE:   SetTimer(hWnd, TIMER_ID, 1000, NULL);   hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;             hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ;   PostMessage(hWnd,WM_TIMER,TIMER_ID,NULL);     return TRUE; 是可以正确运行的.但这地方的问题是如果我用SendMessage()函数就不能实现目的,不知是为什么? 9:我还是觉得一秒种就重绘一个位图还是不太好,所以我就改成了:  case WM_TIMER:   if(0==flag)   {    hDC=GetDC(hWnd);    hdcMem = CreateCompatibleDC (hDC);    SelectObject (hdcMem, hBitmap);    BitBlt (hDC,0,0,1024,768, hdcMem,0,0,SRCCOPY);    DeleteDC (hdcMem) ;    ReleaseDC(hWnd, hDC);    flag=1;   }   return TRUE; 呵呵,这下好啦. 10:其实在这个程序中有个主要的问题就是没从注册表中读信息,也没往注册表中保存用户设置,其实就压根没设置什么,呵呵,这是因为我还不会注册表的操作. 11:现在我还不知道如何在MFC框架下做一个屏保程序. 
/
本文档为【做屏保】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索