26.3 动画效果
除了实现静态的多媒体应用外,在VC中可以通过编程(www.cppentry.com)实现动画效果。本节中介绍部分动画效果的实现。26.3.1小节介绍实现标题栏和任务栏的动画图标。26.3.2小节介绍使用DrawIcon()函数实现图标动画。26.3.3小节介绍系统托盘中的动态图标的实现。
26.3.1 标题栏动画图标
通过定时器,可以实现标题栏显示动画图标的效果。在程序启动时,首先设置图标列表,并启动定时器,定时器每次获取当前索引下的图标句柄,并发送WM_SETICON消息给主对话框,这样,看上去标题栏上显示的是动画图标。代码如下:
- BOOL CMainFrame::SetTBImageList(int imageListID,int
iMaxIcons, COLORREF tc) -
// 设置大图标 - {
- if(iMaxIcons <= 0) return false;
// 判断传入的参数有效性 - m_iMaxTBIcon = iMaxIcons;
// 记录变量值 - VERIFY(m_TBImgList.Create(imageListID, 16, 1, tc));
-
// 创建图标列表 - return true;
// 函数返回 - }
- BOOL CMainFrame::ShowTBNextIcon()
// 设置下一个图标 - {
- if(m_TBImgList.m_hImageList == NULL) return
false; // 判断图标列表是否有效 - m_iTBIconCounter++;
// 图标计数器增一 - if(m_iTBIconCounter >= m_iMaxTBIcon)
m_iTBIconCounter =0; -
// 如果大于最大值,归0 - hTBIcon = m_TBImgList.ExtractIcon
(m_iTBIconCounter); // 析出图标 - // 设置新图标,并保存原来的图标
- HICON hPrevIcon =
- (HICON) AfxGetMainWnd()->SendMessage
(WM_SETICON,true,(LPARAM) - hTBIcon);
- // 释放原来的图标
- if (hPrevIcon) DestroyIcon(hPrevIcon);
- return true;
// 函数成功返回 - }
在上面代码中,SetTBImageList()函数用于初始化图标列表。ShowTBNextIcon()函数用于定时显示当前索引处的图标,显示完成后,并修改当前索引数。获取当前索引处的图标后,发送WM_SETICON消息,并将获得的图标句柄作为参数传递给主对话框。运行程序,就可以看到在动态变化的标题栏图标。