我要投稿
  • 您当前的位置:365bet官方 -> 技术教程 -> 软件开发教程 -> C语言教程 -> 教程内容
  • [ 收藏本页教程 ]
  • VC打造自己特色的屏幕保护C语言教程

    教程作者:佚名    教程来源:不详   教程栏目:C语言教程    收藏本页
      首先先给大家介绍一下屏幕保护程序的原理。其实屏幕保护程序就是普通的可执行程序(exe)。只不过Windows把它换了一个扩展名(scr),放在了系统目录下,由操作系统调用而已。对Windows NT和Windows 2000这个目录是C:\WINNT\system32,对于Win95,Win98这个目录是C:\Windows和C:\Windows\system

      下面就开始动工建立我们自己的屏保吧。

      1. 选择AppWizard建立一个基于对话框的工程,工程名就叫MyScreenSaver好了(在向导的第一步选择:Dialog Based,其他的都采用默认选项)

      2. 准备2张800×600的BMP图片(你可以视自己的爱好设置相应的图片数目,例子中我用了两张),并把它们加入工程,ID分别为IDB_BITMAP1和IDB_BITMAP2,注意须保证这两个ID号是连续的,如果你一次性地把这两个文件加入了工程,这两个ID号通常都是连续的。

      3. 新建一个类CMyScreenWnd,各项设置如下图所示

      4. 点击“OK”后弹出一个警告对话框,如下图所示提示我们不能找到基类CWnd定义的头文件,不要管它,点击“确定”就行了。

      5. 在MyScreenWnd.h中加入一句:#include "windef.h",windef.h中有基类CWnd的定义

      6. 在MyScreenWnd.h文件的CMyScreenWnd类中加入一个公有成员函数,原型如下:

      BOOL Create();

      7. 在MyScreenWnd.cpp中加入Create()函数的实现代码:

    BOOL CMyScreenWnd::Create()

    {

    if (lpszClassName==NULL)

    {

    lpszClassName=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,

    ::LoadCursor(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_NOCURSOR)));

    //注册类,IDC_NOCURSOR为新建光标的ID(需要用户自己绘制)

    //这个光标没有任何图案

    }

    CRect rect(0,0,::GetSystemMetrics(SM_CXSCREEN),

    ::GetSystemMetrics(SM_CYSCREEN)); //得到显示屏的长度和宽度

    CreateEx(WS_EX_TOPMOST,lpszClassName,_T(""),WS_VISIBLE | WS_POPUP,

    rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,

    GetSafeHwnd(),NULL,NULL); //创建一个全屏窗口

    SetTimer(ID_TIMER,2000,NULL); //设置定时器,2秒换一幅图

    return TRUE;

    }

      8. 在MyScreenWnd.h文件的CMyScreenWnd类中加入公有变量,原型如下

      static LPCSTR lpszClassName; //注册类名

      9. 在MyScreenWnd.cpp文件中加入对静态变量lpszClassName的初始化语句:(要注意这条初始化语句必须加在所有的函数外) CMyScreenWnd::lpszClassName=NULL;

      10. 在CMyScreenWnd类中加入一个私有的成员变量,原型如下:

      UINT ID_TIMER;

      并在CMyScreenWnd类的构造函数中加入:

      ID_TIMER=1;

      ID_TIMER是我们用来设置定时器时使用的ID

      11. 在CMyScreenWnd类中加入私有成员变量m_Point定义,原型如下:

      CPoint m_Point;

      并在CMyScreenWnd类的构造函数中加入:

      m_Point.x=-1;

      m_Point.y=-1;

      12. 在CMyScreenWnd类中加入私有成员函数定义,原型如下:

      void DrawBitmap(CDC& dc, int m_nIndex);

      这个函数负责完成绘制和显示BMP文件的工作

      13. 在MyScreenWnd.cpp文件中加入DrawBitmap(CDC& dc, int m_nIndex)的实现代码:

    void CMyScreenWnd::DrawBitmap(CDC& dc,int nIndex)

    {

    CDC dcMem;

    dcMem.CreateCompatibleDC(&dc);

    CBitmap m_Bitmap;

    m_Bitmap.LoadBitmap(IDB_BITMAP1+nIndex);

    dcMem.SelectObject(m_Bitmap);

    //如果你的图片大小是1024×768,请把下面的800,600分别

    //替换为1024*768

    dc.BitBlt(0,0,800,600,&dcMem,0,0,SRCCOPY);

    }

      14. 加入虚函数PostNcDestroy()的声明

    //{{AFX_VIRTUAL(CMyWnd)

    protected:

    virtual void PostNcDestroy();

    //}}AFX_VIRTUAL



    我要投稿   -   广告合作   -   关于本站   -   友情连接   -   网站地图   -   联系我们   -   版权声明   -   设为首页   -   加入收藏   -   网站留言
    Copyright © 2009 - 20012 www.www.ct131.com All Rights Reserved.365bet官方 版权所有