CRgn类是CGdiObject的一个派生类
一)关于CRgn对象创建
ps:CRgn类的构造函数只有一个,定义一个CRgn对象后,必须调用初始化函数进行初始化才能使用。
A:初始化矩形区域
BOOL CreateRectRgn(int x1,int y1,int x2,int y2);
BOOL CreateRectRgnIndirect(LPCRECT lpRect);
B:初始化椭圆区域
BOOL CreateEllipticRgn(int x1,int y1,int x2,int y2);
BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
C:初始化多边形区域
BOOL CreatePolygonRgn(LPPOINT lpPoints,int nCount ,int nMode);
ps:lpPoints指向一个POINT结构或CPoint对象数组;nCount是多边形区域顶点的数目;nMode是多边形的填充模式,可选用参数ALTERNATE或WINDING。
D:初始化一个包含一系列多边形的区域
BOOL CreatePolyPolygonRgn(LPPOINT lpPoints,LPINT lpPolyCounts,int nCount,int nPolyFillMode);
ps:创建的多边形可独立也可相交。lpPoints指向一个POINT结构数组或CPoin对象数组,数组中的每个结构或对象用来表示一个顶点的坐标。参数lpPolyCounts是一个整数数组,存储的是各个多边形的顶点数。参数nCount表示区域中多边形的数目,即lpPolyCounts数组的项数。参数nPolyFillMode表示填充模式。
eg:
CRgn m_Rgn;
POINT point[12]; //定义一个POINT结构数组
... //输入坐标数值
int nCount[3];
nCount[0] = 3;
nCount[1] = 4;
nCount[2] = 5; //区域中各个多边形的顶点数目
m_Rgn.CreatePolyPolygonRgn(point,nCount,3,0); //初始化区域对象
//ps:以上代码初始化一个包含三个多边形的区域,三个多边形的顶点数分别是3、4、5,结构数组point中存放的是顶点坐标,一共12个顶点。
m_Rgn.DelectObject();
三)关于CRgn对象常用操作
A:通过已存在的2个对象初始化新的对象
int CombineRgn(CRgn* pRgn1,CRgn* pRgn2, int nCombineMode);
ps:参数nCombineMode为操作模式。具体如下:
RGN_AND: 以两个区域的相交部分初始化新区域。
RGN_COPY: 初始化一个和第1区域相同的区域。
RGN_DIFF: 用第1区域中没有与第2个区域相交的部分初始化区域。
RGN_OR: 初始化一个包含两个区域的区域。
RGN_XOR: 初始化一个包含两个区域,但不包含两个区域相交部分的区域。
返回值:
COMPLEXREGION: 区域覆盖边界。
ERROR: 操作无效。
NULLREGION: 区域为空。
SIMPLEREGION: 区域没有覆盖边界。
B:用一个存在的区域复制初始化当前的区域
int CopyRgn(CRgn* pRgnSrc);
C:判断2个区域是否相同
BOOL EqualRgn(CRgn* pRgn);
D:移动区域
int OffsetRgn(int x,int y); //x,y代表横向及纵向移动量
int OffsetRgn(POINT point); //返回值含义同CombineRgn
E:获取区域边界矩形
int GetRgnBox(LPRECT lpRect);
F:判断一个点是否在区域中
BOOL PtInRegion(int x,int y);
BOOL PtInRegion(POINT point);
G:判断一个区域是否在区域中
BOOL RectInRegion(LPCRECT lpRect);
四)关于CRgn对象的引用
A:使区域无效并重绘
InvalidateRgn(&m_Rgn);