填充图形区域
在绘制图形时,有时需要在图形中填充一些颜色或填充某个图像。那么该如何向图形区域中填充颜色或图像呢?设备上下文CDC类提供了4个填充区域的函数,下面分别进行介绍。
(1)FillRect
该方法用所标识的画刷填充一个矩形区域。
语法:
void FillRect( LPCRECT lpRect, CBrush* pBrush );
参数说明:
lpRect:表示需要填充的矩形区域。
pBrush:表示一个画刷对象指针,函数将使用该画刷填充矩形区域。
(2)FillSolidRect
该方法用指定的颜色填充一个矩形区域。
语法:
void FillSolidRect( LPCRECT lpRect, COLORREF clr );
参数说明:
lpRect:表示需要填充的矩形区域。
clr:标识一个RGB颜色值,函数使用该颜色填充矩形区域。
(3)FillRgn
该方法用所标识的画刷填充一个选区。
语法:
BOOL FillRgn( CRgn* pRgn, CBrush* pBrush );
参数说明:
pRgn:表示一个选区对象。选区可以通过系统提供的API函数CreateRectRgn、CreateEllipticRgn、CreatePolygonRgn等函数创建。
pBrush:表示一个画刷对象指针,函数将使用该画刷填充选区。
(4)FillPath
该方法用当前的画刷填充路径。
语法:
BOOL FillPath( );
下面通过一个示例来演示各个区域的填充方法。
例如,填充区域的方法。
(1)创建一个单文档/视图结构的应用程序,工程名称为“FillRC”。
(2)在视图类的OnDraw方法中编写程序代码。
void CFillRCView::OnDraw(CDC* pDC)
{
CFillRCDoc* pDoc = GetDocument(); //获取文档对象
ASSERT_VALID(pDoc); //验证文档对象
CRect rc(30,40,100,120); //定义一个区域对象
CBrush brush(RGB(128,128,128)); //定义一个颜色画刷
pDC->FillRect(rc,&brush); //使用颜色填充区域
brush.DeleteObject(); //删除画刷对象
CBitmap bmp; //定义一个位图对象
bmp.LoadBitmap(IDB_BKBITMAP); //加载位图
brush.CreatePatternBrush(&bmp); //创建位图画刷
CRect bmpRC(110,40,200,120); //定义一个区域对象
pDC->FillRect(bmpRC,&brush); //使用位图填充区域
bmp.DeleteObject(); //释放位图对象
brush.DeleteObject(); //释放画刷对象
CRect rectrc(210,40,300,120); //定义一个区域对象
CRect hrc(280,60,350,140); //定义一个区域对象
pDC->Rectangle(rectrc); //绘制矩形边框
pDC->Rectangle(hrc); //绘制矩形边框
HRGN hRect = CreateRectRgn(210,40,300,120); //创建一个矩形选区
HRGN hrgn = CreateRectRgn(280,60,350,140); //创建一个矩形选区
HRGN hret = CreateRectRgn(0,0,0,0); //创建选区
CombineRgn(hret,hRect,hrgn,RGN_AND); //组合选区,获取两个选区的公共部分
brush.CreateSolidBrush(RGB(255,0,0)); //创建一个颜色画刷
CRgn rgn; //定义一个选区对象
rgn.Attach(hret); //将选区对象附加一个选区句柄
pDC->FillRgn(&rgn,&brush); //填充选区
brush.DeleteObject(); //释放画刷对象
rgn.Detach(); //分离选区句柄
DeleteObject(hRect); //释放选区句柄
DeleteObject(hrc); //释放选区句柄
DeleteObject(hret); //释放选区句柄
}
说明:通过CombineRgn函数可以将图形组合在一起形成一个新的图形。
(3)运行程序,效果如图1所示。
.jpg)
图1 填充区域