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