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个像素了。
	*/

运行结果截图:

相关推荐
MSTcheng.1 天前
CANN ops-math算子的跨平台适配与硬件抽象层设计
c++·mfc
平安的平安2 天前
面向大模型算子开发的高效编程范式PyPTO深度解析
c++·mfc
杜子不疼.2 天前
基于ATVC模板库的Ascend C Vector算子快速开发指南
c语言·开发语言·mfc
范纹杉想快点毕业3 天前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc
范纹杉想快点毕业3 天前
状态机设计与嵌入式系统开发完整指南从面向过程到面向对象,从理论到实践的全面解析
linux·服务器·数据库·c++·算法·mongodb·mfc
小黄人软件4 天前
【MFC】底层类显示消息到多个界面上。 MFC + 线程 + 回调 的标准模板 C++函数指针
c++·mfc
范纹杉想快点毕业5 天前
嵌入式系统架构之道:告别“意大利面条”,拥抱状态机与事件驱动
java·开发语言·c++·嵌入式硬件·算法·架构·mfc
范纹杉想快点毕业6 天前
嵌入式实时系统架构设计:基于STM32与Zynq的中断、状态机与FIFO架构工程实战指南,基于Kimi设计
c语言·c++·单片机·嵌入式硬件·算法·架构·mfc
fqbqrr7 天前
2601Mfc,自动化excel
自动化·excel·mfc
fqbqrr7 天前
2601Mfc,自动化excel2
自动化·mfc