我在开发《518抽奖软件》(www.518cj.net)的时候,用户有说想增加悬念,中奖后图片渐渐淡入,类似移开一个遮挡物显示照片的效果。我研究发现,在原来的代码基础上少增加点代码即可,不改变原来代码的结构,改动工作不大,所以添加了此功能,只有我们软件有这个功能。
下面主要把实现原理和核心的几个函数代码贴出来。
HRGN rgn = NULL;
if (bEllipse)
{
rgn = CreateEllipticRgn(rc_actl.left, rc_actl.top, rc_actl.right, rc_actl.bottom);
SelectClipRgn(hDc, rgn);
}
img->draw(hDc, rc_actl);
if (rgn) {
SelectClipRgn(hDc, NULL);
DeleteObject(rgn);
}
核心的代码,就是创建一个剪切区域,后面的绘制操作只能在这个区域内显示,区域外的自动删除,这样就可以了。绘完成这一个元素后,马上删除剪切区域即可。