一、介绍绘制颜色填充矩形函数
前面介绍的几个绘图函数填充颜色都需要专门定义画刷,今天介绍的这个函数可以直接绘制出带有填充色的矩形。
原型1:void FillSolidRect(int x,int y,int cx,int cy,COLORREF color);
参数:(x,y)矩形左上角坐标;(cx,cy)矩形宽高;color填充颜色
返回值:无
原型2:void FillSolidRect (LPCRECT lpRect,COLORREF color);
参数:lpRect矩形结构体或类对象指针;color填充颜色。
返回值:无
说明:
a.FillSolidRect函数是CDC类的成员函数,使用时需要CDC类指针调用。
b.关于画笔、画刷的设置对这个函数没有作用。
c.FillSolidRect函数绘制的矩形,包括左边界和上边界,不包括右边界和下边界,也就是说右边界和下边界位置不会填充颜色。当填充左右两个相邻矩形时公共边的颜色是右边色块的颜色,上下相邻则是下面矩形的颜色。
二、画刷填充矩形函数
对于已经画好的矩形,当想改变其填充颜色时,可以使用FillRect函数。
1.1 画刷填充矩形函数
原型:void FillRect(LPCRECT lpRect,CBrush* pBrush);
参数:lpRect是矩形结构体指针,也可使用CRect类对象或对象指针
pBrush指定画刷对象指针
返回值:无
说明:
a.函数FillRect是CDC类成员函数,使用时需用CDC类指针调用;
b.当使用CRect做参1时,可以使对象,也可以是指针;
c.当使用FillRect填充带边框的矩形时,原有的边框宽度只保留1个像素;
d.这个函数不同于其他绘图函数之处在于,画刷不是选入CDC中,而是作为参数直接传入函数;与FillSolidRect把颜色作为参数相似。
四、案例程序
题目:在自定义坐标系中,绘制四个宽度、高度均为窗口宽度、高度一半的75%的矩形;位置及要求:第一象限,绿色填充矩形,无边框;第二象限,红色填充矩形,无边框;第三象限,带边框填充蓝色矩形,边框宽度4像素,颜色深灰;第四象限,绘制与第三象限相同带框矩形,然后FillRect函数再次填充,颜色用黄色。
代码及注释如下(如运行代码可拷贝到OnDraw函数中):
//一、自定义坐标系
CRect rect;
GetClientRect(rect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(rect.Width(), rect.Height());
pDC->SetViewportExt(rect.Width(), -rect.Height());
pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
//二、矩形宽、高
int w = rect.Width() / 2 * .75, h = rect.Height() / 2 * 0.75;
//三、在第一象限绘制无边框绿色填充矩形
CRect rectI(0, h, w, 0); //第一象限矩形类对象声明、赋值
pDC->FillSolidRect(&rectI, 0x00ff00);//绘制矩形
//四、在第二象限绘制无边框红色矩形
CRect rectII(-w, h, 0, 0);//第二象限矩形
pDC->FillSolidRect(&rectII, 0x0000ff);//绘制矩形
//五、第三、四象限绘制深灰边框蓝色填充矩形
CRect rectIII(-w, 0, 0, -h); //第三象限矩形
CRect rectIV(0, 0, w, -h); //第四象限矩形
CPen grayPen(PS_SOLID, 4, 0x282828); //生成深灰画笔
CPen* oldPen=pDC->SelectObject(&grayPen);//将深灰画笔选入CDC
CBrush blueBrush(0xff0000);//生成蓝色画刷
CBrush* oldBrush = pDC->SelectObject(&blueBrush);//选入画刷
pDC->Rectangle(rectIII);//在第三象限绘制带框矩形
pDC->Rectangle(rectIV); //在第四象限绘制带框矩形
pDC->SelectObject(oldPen); //恢复默认画笔
pDC->SelectObject(oldBrush); //恢复默认画刷 黄色255、255、0
//六、对第四象限矩形填充黄色
CBrush yellowBrush(0x00ffff); //生成黄色画刷
oldBrush = pDC->SelectObject(&yellowBrush); //将黄色画刷选入CDC
pDC->FillRect(&rectIV, &yellowBrush); //用画刷填充第四象限矩形
pDC->SelectObject(oldBrush); //恢复缺省画刷
/*
说明:第三、第四象限的边框画的都是4个像素宽,但第四象限矩形被
黄色重新填充后,边框剩下只有1个像素了。
*/
运行结果截图: