一种比较简单的绘制半透明多边形的方法
2011-01-05 16:28
621 查看
绘制半透明多边形
首先我们知道用AlphaBlend()函数可以实现绘制透明矩形而要绘制透明多边形则会更复杂一点.首先工程中要使用该函数必须包含msimg32.lib文件
#pragma comment(lib, “msimg32.lib”)
然后在OnDraw或者OnPaint消息函数添加代码
思路:由于用AlphaBlend函数必须从一个源DC中复制其中的内容到目标DC中,所以要创建一个内存DC在其中绘制我们所需要的多边形,但这边就会存在一个问题,便是创建的源DC默认会以黑色填充背景,如果直接将整个DC贴过去,那原先的背景将会被覆盖,就达不到我们需要的效果,因此我们在贴图前设置一下用SetClipRgn设置一下要更新的区域,然后再进行贴图操作就能达到效果。详细代码如下:
CRect
rc;
CDC
*pDC = GetDC();
CDC memdc;
CBitmap
bmp, *pOldBitmap;
memdc.CreateCompatibleDC(pDC);
GetClientRect(&rc);
bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
pOldBitmap
= memdc.SelectObject(&bmp);
rgn.CreatePolygonRgn(pt,
6, ALTERNATE);
CBrush
brush(RGB(0, 0, 255));
memdc.FillRgn(&rgn,
&brush);
// 关键在这,设置裁剪区域,也就是只有这个区域需要更新
pDC->SelectClipRgn(&rgn);
BLENDFUNCTION bf;
bf.BlendOp =
AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha =
0x70; //设置透明值
bf.AlphaFormat = 0;
pDC->TextOut(10,
10, "透明测试");
AlphaBlend(pDC->m_hDC,
0,0,rc.Width(),rc.Height(),memdc.m_hDC,0,0,rc.Width(),rc.Height(),bf);
相关文章推荐
- CSharpGL(40)一种极其简单的半透明渲染方法
- 一种比较简单的判断素数的方法
- 解决ScrollView嵌套RecyclerView只显示一行的一种比较简单的方法
- 一种比较简单的在USB U盘中访问nandflash的方法
- avr 矩阵键盘扫描,一种比较简单的方法
- 一种将图片绘制在一个圆形区域内的简单方法——CGContextClip
- 一种c#读取文本比较简单的方法
- 一种比较简单的递归创建目录的方法
- 一种通过鼠标操作实现多边形的绘制的实现方法
- 一种比较简单快速的硬盘全新安装Win10单双系统的方法
- autocad2014绘制矩形和正多边形的简单方法
- 几种绘制半透明多边形/绘制半透明矩形的方法
- autocad2014绘制矩形和正多边形的简单方法
- 几种绘制半透明多边形/绘制半透明矩形的方法
- 一种简单实现卡通勾边渲染的方法
- C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较
- 绘制不规则位图方法总结,多种实现方法,全面测试比较
- 例题:计算运费。c#语言基础,比较简单。看代码输入格式和方法。同样方法可以做一个 出租车打车的程序
- 一种简单的方法在程序中实现透明效果(JAVA)
- iOS一种简单的改变一个label上范围内字体颜色和大小的方法