谢谢!

解决方案 »

  1.   

    先制作好自己的屏保程序,编写一个窗口类CMyWnd,该窗口必须全屏,有任何消息(比如鼠标移动,键盘)退出程序(PostMessage(WM_CLOSE);),背景设成黑色。添加函数Create();
    BOOL CMyWnd::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, 500, NULL);//计时器,ID_TIMER别忘了定义 return TRUE;
    }
    //为了防止同时运行两个相同的程序,下面两个函数是必需的
    void CMyWnd::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
    {
    CWnd::OnActivate(nState,pWndOther,bMinimized);
    if(nState==WA_INACTIVE)
    PostMessage(WM_CLOSE);
    }
    void CMyWnd::OnActivateApp(BOOL bActive, HTASK hTask)
    {
    CWnd::OnActivateApp(bActive, hTask);
    if(!bActive) //is being deactivated
    PostMessage(WM_CLOSE);
    }
    //OnPaint()函数将全屏窗口置为黑色
    void CMyWnd::OnPaint()
    {
    CPaintDC dc(this);
    CBrush brush(RGB(0,0,0));
    CRect rect;
    GetClientRect(rect);
    dc.FillRect(&rect,&brush);
    }
    //由计数器调用DrawBitmap()函数,切换图片;
    //注意,下面两个函数中的IDB_BITMAP1, dc.BitBlt(0,0,800,600……以及if(nIndexBit>=5)中的
    //有关数据依据你的bmp图片个数、尺寸、位置不同而不同,我是选择了5张
    //800x600的bmp图片。注意,ID值是连续的,IDB_BITMAP1最小
    void CMyWnd::DrawBitmap(CDC& dc, int nIndexBit)
    {
    CDC dcmem;
    dcmem.CreateCompatibleDC(&dc);
    CBitmap m_Bitmap;
    m_Bitmap.LoadBitmap(IDB_BITMAP1+nIndexBit);
    dcmem.SelectObject(m_Bitmap);
    dc.BitBlt(0,0,800,600,&dcmem,0,0,SRCCOPY);
    }
    void CMyWnd::OnTimer(UINT nIDEvent)
    {
    CClientDC dc(this);
    static nIndexBit=0;
    if(nIndexBit>=5)
    nIndexBit=0;
    DrawBitmap(dc, nIndexBit++);
    CWnd::OnTimer(nIDEvent);
    }
    //响应键盘、鼠标是屏幕保护程序不可缺少的
    void CMyWnd::OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)
    {
    PostMessage(WM_CLOSE);
    }
    void CMyWnd::OnLButtonDown(UINT nFlags,CPoint point)
    {
    PostMessage(WM_CLOSE);
    }
    void CMyWnd::OnMButtonDown(UINT nFlags,CPoint point)
    {
    PostMessage(WM_CLOSE);
    }
    void CMyWnd::OnRButtonDown(UINT nFlags,CPoint point)
    {
    PostMessage(WM_CLOSE);
    }
    void CMyWnd::OnSysKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)
    {
    PostMessage(WM_CLOSE);
    }
    void CMyWnd::OnMouseMove(UINT nFlags,CPoint point)
    {
    if(m_prePoint == CPoint(-1,-1))
    m_prePoint = point;
    else if(m_prePoint!=point)
    PostMessage(WM_CLOSE);
    }
    void CMyWnd::OnDestroy()
    {
    //删掉计时器
    KillTimer(ID_TIMER);
    }
    void CMyWnd::PostNcDestroy()
    {
    delete this;
    }
    再在"Project"-->"Settings"中更改Debug和Realease,将Link页的"Out put file"项的XXX.exe改为XXX.scr
    在InitInstance函数中显示屏保窗口,添加代码:
    CMyWnd* pWnd = new CMyWnd;
    pWnd->Create();
    m_pMainWnd = pWnd;
    return TRUE;
      

  2.   

    SCR我已经生成,我是说如何将其设为默认的屏保。
      

  3.   

    Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Control Panel\Desktop]
    "SCRNSAVE.EXE"="C:\\WINDOWS\\System32\\ssbezier.scr"明白了吗?自己改动就行了。
      

  4.   

    上面不是说了吗ScreenSaverConfigureDialog