鱼C论坛

 找回密码
 立即注册
查看: 2373|回复: 0

[学习笔记] 《Windows SDK》032 区域和裁剪

[复制链接]
发表于 2017-8-3 11:24:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一 核心知识点
* 区域
可以设置一个空间,用来进行某些操作,这些操作只在这个区域中生效
同画笔画刷,区域也是一个GDI对象,使用结束后需要用 DeleteObject 释放其占用的内存

* 创建并填充区域
Windows 提供了很多API函数用来创建不同形状的区域,包括但不仅仅有矩形,椭圆形,多边形等
创建的区域只包含其内部区域,边框线不属于区域(当点落在边框时,调用PtInRegion将返回false)
用 FillRgn 函数对创建好的区域进行内部填充
用 FrameRgn 函数对创建好的区域进行边框上色

* 区域的合并与剪裁
如果仅仅是绘制一个区域,很多API函数可以直接完成,区域的强大之处在于可以用 CombineRgn 函数
将两个区域进行合并,从而形成所需的形状组合
用 SelectClipRgn 将所需的形状进行剪裁,从而使得其内部的绘图等操作不在外部体现

二 新API函数
* CreateRectRgn(0, 0 , 100, 100) 和 CreateRectRgnIndirct(&rect)
这两个函数用于创建一个矩形区域
这两个函数的参数都指向一个矩形的参数


* CreateEllipiticRgn(0, 0, 100, 100) 和 CreateEllipiticRgnIndirect(&rect)
这两个函数用于创建一个椭圆形区域
这两个函数的参数都指向一个限定矩形的参数


* CreatePolygonRgn(apt, 4, ALTERNATE)
该函数用于创建一个多边形区域

第一个参数:POINT结构数组,存放多边形的各个顶点
第二个参数:顶点个数
第三个参数:填充模式,可以是ALTERNATE(默认的,交替模式)或 WINDING(螺旋模式)


* CreatePolyPolygonRgn(apt, asz, 4, ALTERNATE)
该函数用于创建多个多边形区域

第一个参数:POINT结构数组,存放多边形的各个顶点
第二个参数:int数组,存放每个多边形的顶点个数
第三个参数:多边形个数
第四个参数:填充模式,可以是ALTERNATE(默认的,交替模式)或 WINDING(螺旋模式)


* FillRgn(hdc, hRgn, hBrush)
该函数使用指定的画刷填充指定的区域

第一个参数: 环境句柄
第二个参数: 指定的区域
第三个参数: 指定的画刷

* PaintRgn(hdc, hRgn)
该函数用当前画刷填充指定区域,FillRgn 函数的阉割版本,只能使用当前画刷

* FrameRgn(hdc, hRgn, hBrush, 1, 1)
该函数使用指定的画刷填充指定的区域的边框

第一个参数: 环境句柄
第二个参数: 指定的区域
第三个参数: 指定的画刷
第四五个参数:换算的垂直水平宽度,逻辑单位,一般为1

* CombineRgn(hRgnC, hRgnA, hRgnB, RGN_OR)
该函数将区域A和区域B合并为区域C

第一个参数:合并后的区域句柄
第二三个参数:两个需要合并的区域句柄
第四个参数:合并方式,可以说一下的某一种——
1 RGN_AND   取交集 == A && B
2 RGN_COPY  取第一个区域 ==  A
3 RGN_DIFF  取第一个区域中未和第二个区域重叠的部分 == A - B
4 RGN_OR    取并集 == A || B
5 RGN_XOR   取并集减去交集 == A || B - (A && B)

* SelectClipRgn(hdc, hRgn)
该函数选择一个区域作为指定设备环境的当前剪裁区域

第一个参数: 指定的环境设备句柄
第二个参数: 指定的选择区域

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 21:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表