大家对PowerPoint的幻灯片特效一定不陌生,还有Windows系统的屏保模式所展现的一张张漂亮动态的图片效果(走马灯特效),这些效果十分吸引人,在很多广告播放器中都经常用到。
这一节我就给大家展现一个例子,讲解如何利用GDI/GDI+ API实现图片切换特效的。
先亮一下这个例子的界面:
这个例子部分代码参考了电子工业出版社出版的《Visual C++数字图像处理开发入门与编程实践》一书中的一个例子,支持如下几种特效:
特效显示类型
//enum EffectDislayType
//{
// EDT_NONE = 0, // 无特效
// EDT_SCANDOWN = 1, // 向下扫描
// EDT_VSCAN, // 垂直双重扫描
// EDT_MOVERIGHT, // 向右移动
// EDT_HSMOVE, // 水平双重移动
// EDT_VBLIND, // 垂直百叶窗
// EDT_HBLIND, // 水平百叶窗
// EDT_VRASTER, // 垂直栅条
// EDT_HRASTER, // 水平栅条
// EDT_MOSAIC, // 马赛克
// EDT_ALPHABLEND, //淡入淡出
// EDT_RAND // 随机特效
//};
这个例子名叫Slideshow,负责显示图像和切换的窗口类为CChildView,继承于CWnd,类声明如下:
// CChildView 窗口
class CChildView : public CWnd
{
// 构造
public:
CChildView();
// 属性
public:
// 操作
public:
void LoadFolderImages(); //加载目录里的图片
void BeginEffect(); //开始显示切换动画
void EndEffect(); //结束动画
void SetPicFolderPath(CString strPath)
{
m_strPath = strPath;
}
CString GetPicFolderPath()
{
return m_strPath;
}
int GetPicCount()
{
return m_nPicNum;
}
//设置特效类型
void SetEffectType(EffectDislayType nEffectType)
{
m_nEffectDisplayType = nEffectType;
}
EffectDislayType GetEffectType()
{
return m_nEffectDisplayType;
}
// 重写
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
// 实现
public:
virtual ~CChildView();
// 生成的消息映射函数
protected:
afx_msg void OnPaint();
afx_msg void OnTime