zoukankan      html  css  js  c++  java
  • 实现程序窗口不断变化的动画图标

    利用定时器和可在窗口创建完成后修改其窗口图标的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);
    }
    
  • 相关阅读:
    SqlParameter构造函数让人大吃一斤
    ASP.NET的图片上传和显示
    不去琢磨什么CSS后代选择器之类的鸟玩意了
    datatable里添加一个标识列
    提高工作效率
    调试无法命中断点问题
    离DBA还有多远?
    开发守则
    方法或函数也可以用泛型
    母版页访问内容页
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6920855.html
Copyright © 2011-2022 走看看