当前位置:编程学习 > VC++ >>

用VC++6.0制作图片屏幕保护程序

 

 

  VC++可谓神通广大,如果学到家了,或者就掌握了那么一点MFC,你

也会感到它的方便快捷,当然最重要的是功能强大。不是吗,从最基本的应

用程序.EXE到动态连接库DLL,再由风靡网上的ActiveX控件到Internet

Server API,当然,还有数据库应用程序……瞧,我都用它来做屏幕保

护程序了。一般的屏幕保护程序都是以SCR作为扩展名,并且要放在

c:windows 目录或 c:windowssystem 目录下,由Windows 98内部程

序调用(Windows NT 是在 c:windowssystem32 目录下)。怎么调用?

不用说了,这谁不知道。

  好了,我们来作一个简单的。选择MFC AppWizard(exe),Project Name

为MyScreensaver,[NEXT],对话框,再后面随你了。打开菜单Project、

Settings,在Debug页、Executable for debug session项,以及Link页中

Output file name项改为c:windowsMyScreensaver.scr,这样,你可以调

试完后,直接在VC中运行(Ctrl+F5),便可看到结果。当然,这样做的唯

一缺点是你必须手动清除Windows目录下的垃圾文件(当然是在看到满意结果

后;还有,你可借助SafeClean 这个小东东来帮你清除,除非你的硬盘大的

让你感到无所谓……快快快回来,看我跑到那里去了)。接下来用Class Wizard

生成CMyWnd类,其基类为CWnd(在Base Class 中为generic CWnd)。这个类

是我们所要重点研究的。创建满屏窗口、计时器,隐藏鼠标,展示图片,响

应键盘、鼠标等等,这家伙全包了。至于MyScreensaverDlg.h与

MyScreensaverDlg.cpp文件我们暂时不管。打开MyScreensaver.cpp,修改

InitInstance()函数:

  BOOL CMyScreensaverApp::InitInstance()

  {

   AfxEnableControlContainer();

  #ifdef _AFXDLL

   Enable3dControls(); // Call this when using MFC in a shared DLL

  #else

   Enable3dControlsStatic(); // Call this when linking to MFC statically

  #endif

   CMyWnd* pWnd = new CMyWnd;

   pWnd->Create();

   m_pMainWnd = pWnd;

   return TRUE;

  }

  当然,再这之前得先 #include “MyWnd.h" 。后面要做的都在MyWnd.h 与

MyWnd.cpp 两文件中了。

  下面给出CMyWnd 的说明:

  class CMyWnd : public CWnd

  {

  public:

   CMyWnd();

   static LPCSTR lpszClassName; //注册类名

  public:

   BOOL Create();

  public:

   // ClassWizard generated virtual function overrides

   //{{AFX_VIRTUAL(CMyWnd)

   protected:

   virtual void PostNcDestroy();

   //}}AFX_VIRTUAL

  public:

   virtual ~CMyWnd();

  protected:

   Cpoint m_prePoint; //检测鼠标移动

   void DrawBitmap(CDC& dc, int nIndexBit);

   //{{AFX_MSG(CMyWnd)

   afx_msg void OnPaint();

   afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

   afx_msg void OnLButtonDown(UINT nFlags, Cpoint point);

   afx_msg void OnMButtonDown(UINT nFlags, Cpoint point);

   afx_msg void OnMouseMove(UINT nFlags, Cpoint point);

   afx_msg void OnRButtonDown(UINT nFlags, Cpoint point);

   afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

   afx_msg void OnDestroy();

   afx_msg void OnTimer(UINT nIDEvent);

   afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);

   afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);

   //}}AFX_MSG

   DECLARE_MESSAGE_MAP()

  };

  MyWnd.cpp 文件:

  ……

  CMyWnd::CMyWnd()

  {

   m_prePoint=Cpoint(-1, -1);

  }

  LPCSTR CMyWnd::lpszClassName=NULL;

  BOOL CMyWnd::Create()

  {

   if(lpszClassName==NULL)

   {

   lpszClassName=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,

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

补充:软件开发 , Vc ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,