加载中…
个人资料
岩岩爸
岩岩爸
  • 博客等级:
  • 博客积分:0
  • 博客访问:53,759
  • 关注人气:9
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

半透明的阴影效果

(2008-09-10 15:35:16)
标签:

it

分类: MFC

利用 GDI+可以很容易的描画出逼真的半透明效果的阴影。



void ButtonStyle::DrawShadow(Graphics &g )
...{
    g.SetPageUnit(UnitPixel); //设置Graphics的坐标单位为像素
    
    // 初始化
    GraphicsPath ButtonPath;    
    MakePath( ButtonPath );  //这是一个自定义的方法。该处需要获得你想要描画阴影的部分的路径。例如想给一个按钮添加阴影,那么他的区域路径就是一个矩形。即你想要添加阴影的区域的外围形状。

    GraphicsPath &ShadowPath *(ButtonPath.Clone());    //拷贝一个按钮区域路径的副本,用来生成阴影区域路径

    // 获得阴影区域
    Matrix ShadowMatrix;
    ShadowMatrix.Translate( ShadowSize, ShadowSize );// 平移,ShadowSize即阴影延伸出来的像素数,这里是向右下方移动的,可以根据实际情况修改。
    ShadowPath.Transform(&ShadowMatrix);    // 应用矩阵

    Region ButtonRegion(&ButtonPath);  //利用按钮的路径建立按钮区域
    Region ShadowRegion(&ShadowPath);  //利用阴影路径建立阴影的区域
    
    ShadowRegion.Exclude(&ButtonRegion); // 区域求差,这样就得出了纯粹的阴影区域,排除了阴影区域和按钮区域重合的部分。
    
    // 初始化渐变画刷
    PathGradientBrush brush(&ShadowPath);
    brush.SetCenterColor(ShadowColor); // 这里利用的是路径渐变画刷
    Color colors[] ...{Color(0, 0, 0, 0)};
    int count 1;
    brush.SetSurroundColors(colors, &count);
    brush.SetFocusScales(0.75f, 0.75f);  //对渐变效果进行调整,使其更加自然。这句的实际作用是对渐变效果进行缩放。参数是横纵两个坐标轴的缩放比例。

    g.FillRegion(&brush, &ShadowRegion);

    delete &ShadowPath; //别忘了删除Clone出来的副本。
}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有