HRGN,剪裁区域
来源:互联网 发布:阿里云邮箱登录名忘记 编辑:程序博客网 时间:2024/06/06 15:02
什么是剪裁区域?
剪裁区域就是设备描述表中的区域,用于描画处理。
所以一切还要从区域说起:
设备描述表中的区域
与画笔、画刷和位图一样,区域也是GDI对象,需要调用DeletObject来删除创建的区域
区域类型句柄为HRGN
创建矩形区域
hRgn = CreateRectRgn(xLeft, yTop, xRight, yBottom);
hRgn = CreateRectRgnIndirect(&rect);
创建椭圆区域
hRgn = CreateEllipticRgn(xLeft, yTop, xRight, yBottom);
hRgn = CreateEllipticRgnIndirect(&rect);
创建圆角的矩形区域
CreateRoundRectRgn
创建多边形区域
hRgn = CreatePolygonRgn(&point, iCount, iPolyFillMode);
iPolyFillMode 是 ALTERNATE 或者 WINDING
ALTERNATE:封闭区域内部画随便一条射线,只有这条射线能穿过了奇数条边界线时才填充封闭区域
WINDING:封闭区域内部画随便一条射线,只有这条射线能穿过了奇数条边界线时才填充封闭区域,这和ALTERNATE一样。如果这条射线穿过偶数条边界线,如果一个方向(封闭区的边界线方向)的边界线数与另一个方向的边界线数不相等,就填充区域。
创建多个多边形区域
CreatePolyPolygonRgn
区域的作用:
iRgnType = CombineRgn(hDestRgn, hSrcRgn1, hSrcRgn2, iCombine);
这一函数将两个源区域(hSrcRgn1, hSrcRgn2)组合起来并用句柄hDestRgn指向组合成的目标区。这3个区域句柄必须都有效,但是hDestRgn所指向的原来的区域被破坏掉了。
------------------------------------------------------
iCombine含有的值 新区域
RGN_AND 两个源区域的公共部分
RGN_OR 两个源区域的全部
RGN_XOR 两个源区域的全部除去公共部分
RGN_DIFF hSrcRgn1不在hSrcRgn2中的部分
RGN_COPY hSrcRgn1的全部(忽略hSrcRgn2)
---------------------------------------------------------------------
从CombineRgn返回的iRgnType值是下列之一:
NULLREGION:表示得到一个空区域
SIMPLEREGION:表示得到一个简单的矩形、椭圆或多边形
COMPLEXREGION:表示得到一个多个矩形、椭圆或多边形的组合
ERROR:表示出错了
区域的句柄可用的4个绘图函数:
FillRgn(hdc, hRgn, hBrush); 类似FillRect
FrameRgn(hdc, hRgn, hBrush, xFrame, yFrame); 类似FrameRect
InverRgn(hdc, hRgn); 类似InvertRect
PaintRgn(hdc, hRgn); 用设备描述表中的当前画刷填充所指的区域。
所有这些函数都假设区域是逻辑坐标定义的
删除一个区域
DeleteObject(hRgn);
Windows的2个作用于区域而不是矩形的函数
InvalidateRgn(hwnd, hRgn, bErase); 类似于InvalidateRect
ValidateRgn(hwnd, hRgn); 类似于ValidateRect
上面两个函数也会以WM_PAINT消息作出反应
下面开始说明剪裁区域了
首先是创建剪裁区域
SelectObject(hdc, hRgn);
SelectClipRgn(hdc, hRgn);
上面两个函数都是将一个区域选进设备描述表来创建自己的剪裁区域,这个剪裁区域使用设备坐标。
对剪裁区域的操作函数:
ExcludeClipRect 用于将一个矩形从剪裁区域里排除掉
IntersectClipRect 用于创建一个新的剪裁区域,他是前一个剪裁区域与一个矩形的交集
OffsetClipRgn 用于将剪裁区域移动到客户区的另一部分
注意:
GDI会为剪裁区域创建一个副本,所以在将新创建的区域选进设备描述表后,用户可以删除这个区域。
CombineRgn(hDestRgn, hSrcRgn1, hSrcRgn2, iCombine); 中使用的3个区域句柄必须都是有效的,即都要是创建了的。
在调用CombineRgn函数后,源区域即可以删除了,删除不会影响新合成的区域
上一篇:LINUX多路复用select,poll,epoll
下一篇:X Window Programming From Scratch笔记(1
- linux 常见服务端口
- xmanager 2.0 for linux配置
- 【ROOTFS搭建】busybox的httpd...
- openwrt中luci学习笔记
- 什么是shell
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
- HRGN 剪裁区域
- HRGN,剪裁区域
- 区域剪裁
- cocos2dx设置剪裁区域
- visit区域剪裁
- 剪裁区域和Invalidate函数
- HTML5画布剪裁区域教程
- C# 剪裁图片内容区域
- 《Windows程序设计》读书笔记------------->>矩形、区域和剪裁<<
- 图形基础---矩形、区域和剪裁
- [Win32]画刷、矩形、不规则区域和剪裁
- iOS: 剪裁UIImage部分不规则区域
- 第五章 5-10 区域和剪裁
- 第五章 图像基础(矩形、区域和剪裁)
- 矩形与区域的剪裁——CLOVER程序
- OpenGL学习三十四:剪裁区域和TGA图像文件的加载
- CRect和HRGN的区别
- CRect和HRGN的区别
- Android项目共享到GitHub_总结篇
- 极品五笔 造词
- C使用字符串
- uTorrent端口设置
- LINUX多路复用select,poll,epoll
- HRGN,剪裁区域
- 使用表单上传文件(二)
- Java中包、类、方法、属性、常量的命名规则
- WEB开发中常用的正则表达式
- X Window Programming From Scratch笔记(1
- 如何搭建调试IE6,7,8,9的兼容性的环境
- 【HDU5929 2016CCPC东北地区大学生程序设计竞赛 - 重现赛 H】【打表找规律 队列模拟】Basic Data Structure 双端栈下连续1和0做nand的结果
- LINUX,select
- X.509标准