首页 > 代码库 > 实现程序窗口不断变化的动画图标
实现程序窗口不断变化的动画图标
利用定时器和可在窗口创建完成后修改其窗口图标的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); }
实现程序窗口不断变化的动画图标
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。