让程序的图标动起来

Author: 雍华夫 Date: 2001年 41期

?牐犜诖蠹页S玫娜砑绯督獍浴orton AntiVirus中,我们会看到这些软件的控制图标是动画的,这些动画的图标十分形象地反映了程序的功能和运行状况。那么,我们也能在自己的程序中实现这样的功能吗?回答是:不但行而且非常容易!现在,就让我们以VC++ 6.0为例编一个让图标动起来的程序吧。
  ?牐犜诒嘈闯绦蛑埃颐窍壤戳私庖幌露脑怼4蠹叶贾蓝抢檬泳跹邮痹碛梢环蔡耐枷窬シ哦鹄吹模虼宋颐侵恍枰殉绦虻耐急瓴煌5匕匆欢ㄊ奔浼涓舯浠痪托辛耍ㄍ急甑氖亢图涓羰奔涫幽愕男枰ǎ?。主要要做的工作有:1.画出多个图标;2.设置计时器让程序每隔一定时间自动变换图标。下面就让我们一步一步地实现程序。
  ?牐犑紫龋舳疺C++ 6.0,使用MFC AppWizard(exe)新建一个名为Sample的工程,在这里我们以多文档应用程序为例,在AppWizard中不改变默认值,直接按Finish按钮即可。接下来,在WorkSpace中选中ResourceView,添加3个图标,其ID为IDI_ICON1、IDI_ICON2、IDI_ICON3,图标的内容分别为字母A、B、C。
  ?牐牻酉吕矗贑MainFrame类中定义两个私有成员数据。其中,m_ahIcon数组用于存放3个图标的句柄,m_nPos用来指示当前应该使用的图标的句柄在m_ahIcon中的位置:
  ?牐燞ICON m_ahIcon[3];?牔?
  ?牐爄nt m_nPos;??
  ?牐牭谌轿颐窃贑MainFrame::OnCreate成员函数中将图标的句柄装入m_ahIcon数组并初始化m_nPos同时将程序在任务栏上的图标设为第一个图标:
  ?牐爄nt CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
      {   
  ?牐?..............
  ?牐爉_haIcon[0] = AfxGetApp()->LoadIcon(IDI_ICON1);
  ?牐爉_haIcon[1]= AfxGetApp()->LoadIcon(IDI_ICON2);
  ?牐爉_haIcon[2]= AfxGetApp()->LoadIcon(IDI_ICON3);
  ?牐爉_nPos = 0;
  ?牐燬etIcon(m_haIcon [m_nPos++]TRUE);?牔?
  ?牐爎eturn(0)?牔?
  ?牐牓牐?
  ?牐牭谒牟剑颐切枰肅lassWizard为CMainFrame类生成一个消息响应函数OnTimer以便接收WM_TIMER消息,OnTimer函数的功能是循环地更换并显示3个图标:
  ?牐爒oid CMainFrame::OnTimer(UINT nIDEvent)
  ?牐牐?
  ?牐爄f(m_nPos==3)??
  ?牐爉_nPos = 0;??
  ?牐燬etIcon(m_haIcon [m_nPos++]TRUE);
  ?牐燙MDIFrameWnd::OnTimer(nIDEvent);?牔?
  ?牐牓牐?
  ?牐牭谖宀剑贑MainFrame::OnCreate函数中设置一个计时器,使程序每隔1000毫秒自动调用OnTimer函数改变一次图标:
  ?牐燬etTimer(1,1000,NULL);?牔?
  ?牐犠詈蟛灰怯肅lassWizard为CMainFrame类生成DestroyWindow函数,以便程序退出时取消计时器:
  ?牐燘OOL CMainFrame::DestroyWindow?煟?
  ?牐牐?
  ?牐燢illTimer(1);?牔?
  ?牐爎eturn CMDIFrameWnd::DestroyWindow?煟牔?
  ?牐牓牐?
  ?牐犠鐾晟厦娴墓ぷ鳎颐蔷涂梢栽诵谐绦蛄恕G疲绦虻耐急暾娴亩鹄戳恕?