MFC图形函数学习10——画颜色填充矩形函数

一、介绍绘制颜色填充矩形函数

前面介绍的几个绘图函数填充颜色都需要专门定义画刷,今天介绍的这个函数可以直接绘制出带有填充色的矩形。

原型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函数中):

cpp 复制代码
//一、自定义坐标系
	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个像素了。
	*/

运行结果截图:

相关推荐
xiaowu0804 小时前
MFC线程-通过CWinThread派生类实现
c++·mfc
2401_857610034 小时前
Spring Boot OA:企业办公自动化的创新之路
spring boot·后端·mfc
兵哥工控4 小时前
MFC工控项目实例三十一模拟量转化为工程量
c++·mfc
鲤籽鲲19 小时前
C# MethodTimer.Fody 使用详解
开发语言·c#·mfc
VernonJsn1 天前
visual studio 2005的MFC各种线程函数之间的调用关系
ide·mfc·visual studio
兵哥工控1 天前
MFC工控项目实例三十二模拟量校正值添加修改删除
c++·mfc
FastCAE20223 天前
【应用介绍】FastCAE-PHengLEI流体仿真
c++·mfc·仿真·流体·风雷
xiaowu0804 天前
MFC线程-AfxBeginThread使用方法
c++·mfc
獨枭4 天前
优化 MFC CGridCtrl 的表格布局与功能
c++·mfc