windows绘图-区域CRgn

MFC区域 CRgn

概念简介:

区域是一个抽象的概念,它也是绘图对象,但它并不像画笔,画刷那样好理解,我的理解是:它是一个长方形或者椭圆或者其他多边形的一个图像显示的集合。它最大的特点是区域之间可以进行逻辑运算,就像数学中集合之间的运算一样(与或非等)。区域进行逻辑运算之后再进行显示,可以出现特殊的效果。

使用步骤:

   2.1 创建区域

     CreateRectRgn             //创建矩形区域

     CreateEllipticRgn                  //创建椭圆区域

     ...

   2.2 区域进行逻辑运算

     CRgn::CombineRgn

   2.3 绘制区域

     CDC::FillRgn

     CDC::FrameRgn

代码示例:

<span style="white-space:pre">	</span>//创建区域
	CRgn rgn1;
	rgn1.CreateEllipticRgn(50, 50, 250, 250);//创建一个圆形区域
	CRgn rgn2;
	rgn2.CreateRectRgn(25, 75, 300, 100);//创建一个矩形区域
	//区域运算
	rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF);//两个区域进行逻辑运算
	//绘制区域
	CClientDC dc( this );

	CBrush brush1( HS_DIAGCROSS, RGB( 100, 100, 100 ) );
	dc.FillRgn( &rgn1, &brush1 );//填充绘制
	CBrush brush2( RGB( 0, 0, 255 ) );
	dc.FrameRgn(&rgn1, &brush2, 2, 2);//边框绘制

	//释放资源
	rgn1.DeleteObject();
	rgn2.DeleteObject();
	brush1.DeleteObject();
	brush2.DeleteObject();

效果展示:

windows绘图-区域CRgn_第1张图片

区域可以实现不规则窗口的程序,这里不再多介绍

CRgn类简介

CRgn
CObject
└ CGdiObject
└CRgn
调用CRgn的成员函数就可以创建,修改和检取关于此区域对象的信息。
#include <afxwin.h>
CRgn类成员
Construction
CRgn
构造一个CRgn对象
Initialization
CreateRectRgn
用一个矩形区域来初始化一个CRgn对象
CreateRectRgnIndirect 用由一个RECT结构定义的矩形区域来初始化一个CRgn对象
CreateEllipticRgn 用一个椭圆形区域来初始化一个CRgn对象
CreateEllipticRgnIndirect 用由一个RECT结构定义的椭圆形区域来初始化一个CRgn对象
CreatePolygonRgn 用一个多边形区域来初始化一个CRgn对象。如果有必要,系统通过在第一个顶点和最后一个顶点之间绘制直线来自动关闭该多边形
CreatePolyPolygonRgn 用一系列封闭的多边形组成的区域来初始化一个CRgn对象。这些多边形可能互不相交或相互重叠
CreateRoundRectRgn 用一个圆角的矩形区域来初始化一个CRgn对象
CombineRgn 设置一个CRgn对象,使它等效于两个指定的CRgn对象的联合
CopyRgn 设置一个CRgn对象,使它为一个指定的CRgn对象的拷贝
CreateFromPath 从被选入给定设备环境的路径创建一个区域
CreateFromData 根据给定的区域和变换数据创建一个区域
Operations
EqualRgn
检查两个CRgn对象,确定它们是否相等
FromHandle 当给定了一个Windows区域的句柄时返回指向一个CRgn对象的指针
GetRegionData 用描述给定区域的数据来填充指定的缓冲区
GetRgnBox 检取一个CRgn对象的限定矩形的坐标
OffsetRgn 用指定的偏移量移动一个CRgn对象
PtInRegion 确定一个指定的点是否在区域内
RectInRegion 确定一个指定矩形的任何部分是否都在区域的边界内
SetRectRgn 将CRgn对象设置为指定的矩形区域
Operators
operator HRGN
返回包含在CRgn对象中的Windows句柄



你可能感兴趣的:(windows绘图,mfc区域)