setfillstyle 是一个图形库函数,它不属于标准 C 语言库(如 stdio.h, stdlib.h 等),而是属于特定的图形库,最经典和常见的是 Turbo C/C++ 的 graphics.h 库。

这个函数的主要作用是设置后续绘制的填充封闭图形时所使用的填充样式和颜色。
函数原型
void setfillstyle(int pattern, int color);
参数详解
这个函数接受两个参数:
a) pattern (填充样式)
这是一个整型值,它定义了填充图案的类型,图形库提供了一系列预定义的常量来代表不同的图案,下面是一些常见的样式:
| 常量名 | 值 | 描述 |
|---|---|---|
EMPTY_FILL |
0 | 用背景色填充(即不填充) |
SOLID_FILL |
1 | 实心填充 |
LINE_FILL |
2 | 用 线条填充 |
LTSLASH_FILL |
3 | 用稀疏的 斜线填充 |
SLASH_FILL |
4 | 用密集的 斜线填充 |
BKSLASH_FILL |
5 | 用密集的 \\ 反斜线填充 |
LTBKSLASH_FILL |
6 | 用稀疏的 \\ 反斜线填充 |
HATCH_FILL |
7 | 用浅灰色网格填充 |
XHATCH_FILL |
8 | 用交叉的斜线网格填充 |
INTERLEAVE_FILL |
9 | 用交替的斜线填充 |
WIDE_DOT_FILL |
10 | 用稀疏的点填充 |
CLOSE_DOT_FILL |
11 | 用密集的点填充 |
USER_FILL |
12 | 用户自定义填充样式(需要配合 setfillpattern 函数使用) |
注意: 在使用这些常量时,你需要确保包含了头文件 graphics.h。

b) color (填充颜色)
这也是一个整型值,代表填充时所使用的颜色,颜色可以是调色板中的索引值,也可以是一些预定义的颜色常量。
常见的颜色常量有:
| 常量名 | 值 | 描述 (取决于当前的图形驱动和模式) |
|---|---|---|
BLACK |
0 | 黑色 |
BLUE |
1 | 蓝色 |
GREEN |
2 | 绿色 |
CYAN |
3 | 青色 |
RED |
4 | 红色 |
MAGENTA |
5 | 洋红色 |
BROWN |
6 | 棕色 |
LIGHTGRAY |
7 | 浅灰色 |
DARKGRAY |
8 | 深灰色 |
LIGHTBLUE |
9 | 浅蓝色 |
LIGHTGREEN |
10 | 浅绿色 |
LIGHTCYAN |
11 | 浅青色 |
LIGHTRED |
12 | 浅红色 |
LIGHTMAGENTA |
13 | 浅洋红色 |
YELLOW |
14 | 黄色 |
WHITE |
15 | 白色 |
工作原理
setfillstyle 本身不会画任何东西,它只是设置一个“状态”或“模式”,之后,当你调用填充函数(如 floodfill, bar, bar3d, circle 等)来填充一个封闭区域时,图形库就会使用你通过 setfillstyle 设置的样式和颜色。
使用示例
下面是一个完整的 Turbo C/C++ 程序示例,演示了如何使用 setfillstyle 来绘制不同填充样式的矩形。

#include <graphics.h>
#include <conio.h> // 用于 getch()
int main() {
// 1. 初始化图形系统
// DETECT 是一个宏,它会自动检测你的显卡并设置最高的分辨率模式
int gd = DETECT, gm;
initgraph(&gd, &gm, "C:\\TC\\BGI"); // 请确保你的 BGI 文件路径正确
// 如果路径不对,可以尝试 "C:\\Program Files (x86)\\Turbo C++\\BGI" 或其他路径
// 或者直接写 " " 让它在当前目录查找
// 2. 检查初始化是否成功
if (graphresult() != grOk) {
printf("图形初始化失败!");
getch();
return 1;
}
// 3. 设置并绘制不同填充样式的图形
// 示例1: 实心填充,红色
setfillstyle(SOLID_FILL, RED);
bar(50, 50, 150, 150); // 绘制一个填充的矩形
// 示例2: 斜线填充,绿色
setfillstyle(SLASH_FILL, GREEN);
bar(170, 50, 270, 150);
// 示例3: 点填充,蓝色
setfillstyle(CLOSE_DOT_FILL, BLUE);
bar(290, 50, 390, 150);
// 示例4: 网格填充,黄色
setfillstyle(HATCH_FILL, YELLOW);
bar(50, 170, 150, 270);
// 示例5: 不填充(用背景色填充),白色边框
setfillstyle(EMPTY_FILL, WHITE);
bar(170, 170, 270, 270);
rectangle(170, 170, 270, 270); // 画一个矩形边框,因为 EMPTY_FILL 看不到效果
// 示例6: 用户自定义样式(这里用示例代替,USER_FILL需要配合setfillpattern)
// setfillstyle(USER_FILL, 15);
// ... 其他代码 ...
// 4. 添加说明文字
outtextxy(50, 300, "SOLID_FILL");
outtextxy(170, 300, "SLASH_FILL");
outtextxy(290, 300, "CLOSE_DOT_FILL");
outtextxy(50, 320, "HATCH_FILL");
outtextxy(170, 320, "EMPTY_FILL");
// 5. 等待用户按键
getch();
// 6. 关闭图形模式,返回文本模式
closegraph();
return 0;
}
如何编译和运行:
- 你需要一个 Turbo C/C++ 的集成开发环境(IDE)。
- 将代码复制并粘贴。
- 确保你的 BGI (Borland Graphics Interface) 文件位于
C:\TC\BGI目录下,或者修改initgraph中的路径。 - 编译并运行程序,你将看到一个窗口,里面显示了5个不同填充样式的矩形。
重要注意事项
-
依赖特定库:
setfillstyle是graphics.h的一部分,这个库是过时的,它主要用于教学目的和一些旧的 DOS 程序,在现代的 Windows、Linux 或 macOS 平台上,标准 C/C++ 编译器(如 GCC, Clang, MSVC)默认不包含这个库,你不能在 Visual Studio、Xcode 或现代的 MinGW 中直接使用它。 -
平台兼容性: 如果你想在现代平台上开发图形程序,应该使用现代的图形库,
- SDL (Simple DirectMedia Layer): 跨平台,适合游戏和多媒体应用。
- SFML (Simple and Fast Multimedia Library): C++ 封装 SDL,更易用。
- OpenGL: 底层图形 API,功能强大,用于 2D 和 3D 图形。
- Raylib: 一个简单易用的 C 图形库。
- Qt: 一个跨平台的 C++ 应用程序框架,包含强大的图形模块。
-
与
floodfill的关系:setfillstyle经常与floodfill函数一起使用。floodfill用于填充一个任意形状的封闭区域。// 画一个圆作为边界 circle(300, 300, 100); // 设置填充样式为蓝色斜线 setfillstyle(SLASH_FILL, BLUE); // 填充圆内部的区域 floodfill(300, 300, WHITE); // (300,300) 是圆内的一个点,WHITE 是圆边界的颜色
setfillstyle 是一个经典的图形函数,用于设置填充的样式和颜色,虽然它现在已经很少用于实际项目开发,但对于学习计算机图形学基础和理解“状态设置”这一概念非常有帮助,如果你正在学习 C 语言的历史或课程要求使用 Turbo C,那么掌握它就非常重要,对于新的项目,请务必选择现代的图形库。
