实现程序窗口不断变化的动画图标

利用定时器和可在窗口创建完成后修改其窗口图标的SetClassLong函数,在程序中每隔一定时间就调用一次这个函数,让窗口图标循环显示预先准备好的一组图标中的下一个图标,就可实现图标不断变化的动画效果;

1、加载图标资源

  在程序的资源窗口中,插入/引入新的一组图标资源

  在程序的框架类CMainFrame类中添加一个成员变量,用来存放这组图标的句柄

    

  在CMainFrame类的OnCreate函数中利用LoadIcon函数加载这组图标:    

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ......
    // TODO: Delete these three lines if you don't want the toolbar to
    //  be dockable
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
    
    //可以利用AfxGetInstanceHandle函数获取应用程序当前的实例句柄
    m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
    //也可以利用AfxGetApp函数获得当前应用程序对象的指针,再访问其数据成员
    m_hIcons[1]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON2));
    m_hIcons[2]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3));

    return 0;
}

2、定时器的处理

  在CMainFrame类的OnCreate函数中埋下定时器:    

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ......
    // TODO: Delete these three lines if you don't want the toolbar to
    //  be dockable
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
    
    //可以利用AfxGetInstanceHandle函数获取应用程序当前的实例句柄
    m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
    //也可以利用AfxGetApp函数获得当前应用程序对象的指针,再访问其数据成员
    m_hIcons[1]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON2));
    m_hIcons[2]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3));
    
    //设置程序启动时第一个显示的图标即为自添加的第一个图标
    SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[0]);  
    
    SetTimer(1,1000,NULL);
    
    return 0;
}

  为CMainFrame类添加定时器消息WM_TIMER的响应函数,并在该响应函数中调用SetClassLong函数修改程序窗口的图标:

       

void CMainFrame::OnTimer(UINT nIDEvent) 
{
    // TODO: Add your message handler code here and/or call default
    static int index=1;
    SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[index]);
    index=++index%3;  //索引值index只能在0、1、2这三个值之间循环变化
    
    CFrameWnd::OnTimer(nIDEvent);
}

 

转载于:https://www.cnblogs.com/zhouwanqiu/p/6920855.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值