setfillstyle

这个函数用于设置当前设备填充样式。

void setfillstyle(
	FILLSTYLE* pstyle
);
void setfillstyle(
	int style,
	long hatch = NULL,
	IMAGE* ppattern = NULL
);
void setfillstyle(
	BYTE* ppattern8x8
);

参数

pstyle

指向填充样式 FILLSTYLE 的指针。

style

指定填充样式。可以是以下宏或值:

含义
BS_SOLID 0 固实填充。
BS_NULL 1 不填充。
BS_HATCHED 2 图案填充。
BS_PATTERN 3 自定义图案填充。
BS_DIBPATTERN 5 自定义图像填充。

hatch

指定填充图案,仅当 style 为 BS_HATCHED 时有效。填充图案的颜色由函数 setfillcolor 设置,背景区域使用背景色还是保持透明由函数 setbkmode 设置。hatch 参数可以是以下宏或值:

含义
HS_HORIZONTAL 0  
HS_VERTICAL 1  
HS_FDIAGONAL 2  
HS_BDIAGONAL 3  
HS_CROSS 4  
HS_DIAGCROSS 5  

ppattern

指定自定义填充图案或图像,仅当 style 为 BS_PATTERN 或 BS_DIBPATTERN 时有效。
当 style 为 BS_PATTERN 时,ppattern 指向的 IMAGE 对象表示自定义填充图案,IMAGE 中的黑色(BLACK)对应背景区域,非黑色对应图案区域。图案区域的颜色由函数 settextcolor 设置。
当 style 为 BS_DIBPATTERN 时,ppattern 指向的 IMAGE 对象表示自定义填充图像,以该图像为填充单元实施填充。

ppattern8x8

指定自定义填充图案,效果同 BS_PATTERN,该重载以 BYTE[8] 数组定义 8 x 8 区域的填充图案。数组中,每个元素表示一行的样式,BYTE 类型有 8 位,按位从高到低表示从左到右每个点的状态,由此组成 8 x 8 的填充单元,将填充单元平铺实现填充。对应的二进制位为 0 表示背景区域,为 1 表示图案区域。

返回值

示例

以下代码片段设置固实填充:

setfillstyle(BS_SOLID);

以下代码片段设置填充图案为斜线填充:

setfillstyle(BS_HATCHED, HS_BDIAGONAL);

以下代码片段设置自定义图像填充(由 res\bk.jpg 指定填充图像):

IMAGE img;
loadimage(&img, _T("res\\bk.jpg"));
setfillstyle(BS_DIBPATTERN, NULL, &img);

以下完整代码设置自定义的填充图案(小矩形填充),并使用该图案填充一个三角形:

#include <conio.h>
#include <graphics.h>

int main()
{
	// 创建绘图窗口
	initgraph(640, 480);

	// 定义填充单元
	IMAGE img(10, 8);

	// 绘制填充单元
	SetWorkingImage(&img);	// 设置绘图目标为 img 对象
	setbkcolor(BLACK);		// 黑色区域为背景色
	cleardevice();
	setfillcolor(WHITE);	// 白色区域为自定义图案
	solidrectangle(1, 1, 8, 5);
	SetWorkingImage(NULL);	// 恢复绘图目标为默认绘图窗口

	// 设置填充样式为自定义填充图案
	setfillstyle(BS_PATTERN, NULL, &img);

	// 设置自定义图案的填充颜色
	settextcolor(GREEN);

	// 绘制无边框填充三角形
	POINT pts[] = { {50, 50}, {50, 200}, {300, 50} };
	solidpolygon(pts, 3);

	// 按任意键退出
	_getch();
	closegraph();
}

以下代码片段设置自定义的填充图案(圆形图案填充):

setfillstyle((BYTE*)"\x3e\x41\x80\x80\x80\x80\x80\x41");

以下代码片段设置自定义的填充图案(细斜线夹粗斜线图案填充):

setfillstyle((BYTE*)"\x5a\x2d\x96\x4b\xa5\xd2\x69\xb4");
(贡献者:慢羊羊  编辑