龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

在VC中用GDI+绘制角度可变的颜色渐变效果

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
GDI+ 是GDI(Windows 早期版本提供的图形设备接口)的后续版本,是Microsoft Windows XP作系统即后续版本的图形显示技术。它已经集成到了.Net开发环境中,所以不管你的OS是什么版本,只要安

    GDI+ 是GDI(Windows 早期版本提供的图形设备接口)的后续版本,是Microsoft Windows XP作系统即后续版本的图形显示技术。它已经集成到了.Net开发环境中,所以不管你的OS是什么版本,只要安装了.Net框架,就有了GDI+(注意:是.Net框架,而不是.Net开发环境,所以Win98中也可以使用GDI+)。

        现在,言归正传。

        在头文件中加入下面的代码:

#include <GdiPlus.h>
using namespace Gdiplus;
#pragma comment(lib,"gdiplus.lib")

        注意:在使用GDI+函数时必须进行GDI+的初始化,使用完毕要销毁GDI+!
        初始化:

GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

        销毁:

ULONG_PTR gdiplusToken = NULL;
GdiplusShutdown(gdiplusToken);

        下面以给一个CTestDlg的对话框绘制背景为例子,用GDI+实现角度可变的颜色渐变效果。用到的变量:

         iRotation:整型,渐变色的角度
         Color1、Color2、Color3:RGB颜色值

        两种颜色的比较简单,直接用GDI+提供的LinearGradientBrush刷子就行了:

BOOL CTestDlg::OnEraseBkgnd(CDC* pDC)
{
    CDialog::OnEraseBkgnd(pDC);

    //  取得第一种颜色的R,G,B值
    int r1 = GetRValue(Color1);
    int g1 = GetGValue(Color1);
    int b1 = GetBValue(Color1);

    //  取得第二种颜色的R,G,B值
    int r2 = GetRValue(Color2);
    int g2 = GetGValue(Color2);
    int b2 = GetBValue(Color2);

    //  得到绘制区域
    CRect rect;
    GetClientRect(&rect);

    //  GDI+对象
    Gdiplus::Graphics graphics(pDC->GetSafeHdc());
       
    //  刷子
    Gdiplus::LinearGradientBrush linGrBrush(Gdiplus::Rect(0, 0, rect.Width(), rect.Height()),  //  绘制区域
                                                Gdiplus::Color(255, r1, g1, b1),  //  第一种颜色
                                                Gdiplus::Color(255, r2, g2, b2),  //  第二种颜色
                                                (Gdiplus::REAL)(90 - iRotation));  //  渐变色的角度

    graphics.FillRectangle(&linGrBrush, Gdiplus::Rect(0, 0, rect.Width(), rect.Height()));
 
    return TRUE;
}

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接