VC 绘制颜色渐变区域
来源:互联网 发布:c语言中长整型变量 编辑:程序博客网 时间:2024/05/18 05:47
VC 绘制颜色渐变区域
更新日期:2010-12-23
测试环境:VC6.0+WinXP
图片预览:
━━━━━━━━━━━━━━━━━━━━━━━━
绘制颜色渐变区域的函数: DrawGradientV(垂直渐变) DrawGradientH(水平渐变)
#define GRADLEVEL 1
/****************************************************************************
绘制垂直颜色渐变区域
DrawGradientV( HDC hdc //绘图刷子
COLORREF co1 //顶端颜色
COLORREF co2 //低端颜色
RECT& DrawRect) //颜色渐变区域
****************************************************************************/
void DrawGradientV( HDC hdc, COLORREF co1, COLORREF co2, RECT& DrawRect )
{
int r = GetRValue( co1 );
int g = GetGValue( co1 );
int b = GetBValue( co1 );
int r2 = GetRValue( co2 );
int g2 = GetGValue( co2 );
int b2 = GetBValue( co2 );
//计算宽,高
int DrawRectWidth=DrawRect.right-DrawRect.left;
int DrawRectHeight=DrawRect.bottom-DrawRect.top;
if ( DrawRectWidth<=0)
return;
//初始化rect
RECT rect={0,0,DrawRectWidth,GRADLEVEL};
//准备GDI
HDC hMemDC=CreateCompatibleDC(hdc); //创建内存DC
HBITMAP hBitmap=::CreateCompatibleBitmap(hdc,DrawRectWidth,DrawRectHeight);//创建位图
::SelectObject(hMemDC,hBitmap); //把位图选进内存DC
HBRUSH hbr;
for(int i = DrawRectHeight; i > 0; i -= GRADLEVEL )
{
//创建刷子
hbr = CreateSolidBrush( RGB( r, g, b ) );
FillRect( hMemDC, &rect, hbr );
DeleteObject( hbr );
//改变小正方体的位置
rect.top += GRADLEVEL;
rect.bottom += GRADLEVEL;
//判断小正方体是否超界
if( rect.bottom > DrawRect.bottom )
rect.bottom = DrawRect.bottom;
//改变颜色
r += ( r2 - r + i / 2 ) / i * GRADLEVEL;
g += ( g2 - g + i / 2 ) / i * GRADLEVEL;
b += ( b2 - b + i / 2 ) / i * GRADLEVEL;
}
//内存DC映射到屏幕DC
BitBlt(hdc,DrawRect.left,DrawRect.top,DrawRectWidth,DrawRectHeight,hMemDC,0,0,SRCCOPY);
//删除
::DeleteDC(hMemDC) ;
::DeleteObject(hBitmap);
}
/****************************************************************************
绘制水平颜色渐变区域
DrawGradientV( HDC hdc //绘图刷子
COLORREF co1 //左端颜色
COLORREF co2 //右端颜色
RECT& DrawRect) //颜色渐变区域
****************************************************************************/
void DrawGradientH( HDC hdc, COLORREF co1, COLORREF co2, RECT& DrawRect )
{
int r = GetRValue( co1 );
int g = GetGValue( co1 );
int b = GetBValue( co1 );
int r2 = GetRValue( co2 );
int g2 = GetGValue( co2 );
int b2 = GetBValue( co2 );
//计算宽,高
int DrawRectWidth=DrawRect.right-DrawRect.left;
int DrawRectHeight=DrawRect.bottom-DrawRect.top;
if ( DrawRectHeight<=0)
return;
//初始化rect
RECT rect={0,0,GRADLEVEL,DrawRectHeight};
//准备GDI
HDC hMemDC=CreateCompatibleDC(hdc); //创建内存DC
HBITMAP hBitmap=::CreateCompatibleBitmap(hdc,DrawRectWidth,DrawRectHeight);//创建位图
::SelectObject(hMemDC,hBitmap); //把位图选进内存DC
HBRUSH hbr;
for(int i = DrawRectWidth; i > 0; i -= GRADLEVEL )
{
//创建刷子
hbr = CreateSolidBrush( RGB( r, g, b ) );
FillRect( hMemDC, &rect, hbr );
DeleteObject( hbr );
//改变小正方体的位置
rect.left += GRADLEVEL;
rect.right += GRADLEVEL;
//判断小正方体是否超界
if( rect.right > DrawRect.right )
rect.right = DrawRect.right;
//改变颜色
r += ( r2 - r + i / 2 ) / i * GRADLEVEL;
g += ( g2 - g + i / 2 ) / i * GRADLEVEL;
b += ( b2 - b + i / 2 ) / i * GRADLEVEL;
}
//内存DC映射到屏幕DC
BitBlt(hdc,DrawRect.left,DrawRect.top,DrawRectWidth,DrawRectHeight,hMemDC,0,0,SRCCOPY);
//删除
::DeleteDC(hMemDC) ;
::DeleteObject(hBitmap);
}
调用示例:
{
HDC hdc=::GetDC(m_hWnd);
RECT rect={10,10,179,179};
DrawGradientV(hdc,RGB(49,68,212),RGB(147,255,255),rect);
::ReleaseDC(m_hWnd,hdc);
}
void CDemoDlg::OnButton2()
{
HDC hdc=::GetDC(m_hWnd);
RECT rect={210,10,379,179};
DrawGradientH(hdc,RGB(49,68,212),RGB(147,255,255),rect);
::ReleaseDC(m_hWnd,hdc);
}
━━━━━━━━━━━━━━━━━━━━━━━━
推荐:
谈老师的BLOG (佛教大德)
狮姐的博客(狮子窝,学佛与灵魂之探究)
大方广(学习传统文化)
慈善点击(轻松一点,行善积德,何乐不为)
电影《地球公民》(揭示不为人知的一面)
心向光明 远离邪淫(现世警钟,不可不看)
戒淫(上篇)(正淫节欲,戒除邪淫)
戒淫(中篇)(纵欲之乐,忧患随之)
公民教育——命由我造
- VC 绘制颜色渐变区域
- j2me绘制渐变颜色
- iOS绘制颜色渐变
- HTML5绘制颜色渐变
- 绘制颜色渐变三角形
- 用Bitmap绘制渐变颜色
- 使用Bitmap绘制渐变颜色
- PHP绘制渐变颜色图片
- 绘制颜色渐变矩形函数
- 在VC中用GDI+绘制角度可变的颜色渐变效果
- 在VC中用GDI+绘制角度可变的颜色渐变效果
- 在VC中用GDI+绘制角度可变的颜色渐变效果
- VC++窗体背景颜色渐变
- VC++窗体背景颜色渐变 .
- 学vc,加油站(一)区域渐变
- iOS: CGPathRef上绘制渐变颜色
- 利用CAGradientLayer绘制颜色渐变动画
- VC绘制圆角渐变图形
- Delphi QuotedStr函数的原型
- C++实现回文
- ajaxpro综合示例-ajaxpro无刷新更新gridview数据
- DX学习笔记
- 邮件发送的帮助类
- VC 绘制颜色渐变区域
- scanf返回值
- prototype中的继承
- IIS状态代码的含义
- Building the android code
- Tuscany SCA与OSGI的结合方式
- ASP.NET和网页游戏的设想
- 函数指针和指针函数
- 如何hook只知道地址的0x00******的函数