近期项目中需要在一个MFC对话框中轮播显示图片,效果如下:
一共5张背景图,图上有5个小圆点轮流播放显示,并且小圆点加亮,右上角是关闭按钮,鼠标放上去按钮变红色。
最开始的方案是在dlg上添加一个picture控件来加载背景图片,OnTimer事件中控制轮播;在picture上添加5个radio按钮,radio按钮用的是网上下载的一个类CxSkinButton,将圆圈图片添加到bitmap资源中,初始化对话框时设置按钮的图片,这个类将选中,未选中,鼠标移上,鼠标移开灯状态都处理好了,m_radioP1.SetSkin(IDB_BITMAP_LOGIN_NORMAL, IDB_BITMAP_LOGIN_CHECK, IDB_BITMAP_LOGIN_GREEN, IDB_BITMAP_LOGIN_NORMAL, 0, IDB_BITMAP_LOGIN_MASK, 0, 0, 0);
轮播到当前图片时将对应的radio属性设置为SetCheck(1);右上角的关闭图片也用的bmp(这个类的缺点是不支持png格式),做完之后小圆点的效果还可以切换都没有问题,右上角的关闭按钮在图片切换时会漏出白底,初始化时没问题;因此就想换种方式显示。
最终在看了网上的一些解决方案后,选择用GDI+直接在dlg上画图,右上角的关闭不用按钮也直接贴图,OnMouseMove中根据鼠标位置切换图片,当鼠标移动上去时显示红底图片,移开显示初始图片;
具体实现代码如下:
首先是添加gdi+
1.在Stdafx.h头文件中添加如下代码
#include <GdiPlus.h>
#pragma