C语言标准库(ANSI C/C99/C11等)中并没有一个名为 clearrectangle 的标准函数。

这个函数通常出现在特定的图形库中,最著名的就是 BGI (Borland Graphics Interface),它曾广泛应用于早期的 Borland C++ (Turbo C++) 开发环境中。
要理解 clearrectangle,我们主要需要从以下几个方面来看:
- 在BGI图形库中的实现和用法
- 在现代图形编程中的替代方案
- 如何自己实现一个
clearrectangle函数
在 BGI 图形库中的 clearrectangle
在BGI中,clearrectangle 函数的作用是用当前背景色填充一个指定的矩形区域,从而“清除”该区域内的所有图形。
函数原型
void far clearrectangle(int left, int top, int right, int bottom);
参数说明
left: 矩形左上角的 x 坐标。top: 矩形左上角的 y 坐标。right: 矩形右下角的 x 坐标。bottom: 矩形右下角的 y 坐标。
功能描述
该函数会用当前由 setbkcolor() 设置的背景色,填充从 (left, top) 到 (right, bottom) 所定义的矩形区域,这相当于用背景色“画”了一个实心矩形,从而覆盖掉之前在该区域绘制的内容。

使用示例 (BGI / Turbo C++ 环境)
这是一个完整的、可以在 Turbo C++ 或支持BGI的模拟器(如 WinBGI)中运行的例子。
#include <graphics.h>
#include <conio.h>
#include <dos.h>
int main() {
// 初始化图形驱动,设置VGA模式,分辨率为640x480
int gd = VGA, gm = VGAHI;
initgraph(&gd, &gm, "C:\\TC\\BGI"); // 注意:路径需要根据你的TC安装位置修改
// 如果初始化失败
if (graphresult() != grOk) {
printf("Graphics initialization failed!");
return 1;
}
// 1. 设置前景色为白色,背景色为蓝色
setcolor(WHITE);
setbkcolor(BLUE);
// 2. 在屏幕上画一个填充的红色矩形
setfillstyle(SOLID_FILL, RED);
bar(100, 100, 300, 200);
outtextxy(150, 150, "Hello, BGI!");
// 3. 等待2秒,让你看到红色矩形
delay(2000);
// 4. 调用 clearrectangle "清除"一个区域
// 注意:清除的颜色是当前背景色,也就是蓝色
clearrectangle(120, 120, 280, 180);
// 5. 在被清除的区域上画新的文字
setcolor(YELLOW);
outtextxy(140, 140, "Cleared!");
// 6. 按任意键退出
getch();
closegraph(); // 关闭图形模式,返回文本模式
return 0;
}
代码解释:
initgraph(): 初始化图形窗口。setcolor(WHITE): 设置后续绘图的颜色(如线条、文字)为白色。setbkcolor(BLUE): 设置背景色为蓝色,这是clearrectangle使用的颜色。bar(): 画一个填充的红色矩形,并显示 "Hello, BGI!" 文字。delay(2000): 暂停2秒,方便观察。clearrectangle(120, 120, 280, 180): 用蓝色背景色填充这个矩形区域,覆盖掉之前红色的部分,看起来就像是“清除”了。outtextxy(): 在被清除的区域上用黄色文字显示 "Cleared!"。closegraph(): 关闭图形窗口,程序结束。
在现代图形编程中的替代方案
我们很少使用BGI,现代的图形开发依赖于更强大的库,如 SDL2, SFML, OpenGL, Qt 或 Windows GDI,这些库中没有 clearrectangle,因为它们提供了更灵活、更底层的绘制功能。
替代 clearrectangle 的核心思想是:用你想要的“背景色”画一个实心矩形。

以下是一些常见库的替代方法:
使用 SDL2
#include <SDL2/SDL.h>
// 假设 renderer 和 window 已经初始化好
SDL_Renderer* renderer = /* ... */;
SDL_Rect clear_area = { 120, 120, 160, 60 }; // x, y, width, height
// 1. 设置绘制颜色为你的“背景色”(例如黑色)
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // RGBA
// 2. 用这个颜色填充矩形
SDL_RenderFillRect(renderer, &clear_area);
// 3. 将渲染结果呈现到屏幕上
SDL_RenderPresent(renderer);
使用 Windows GDI (在 Win32 程序中)
// 假设 hdc 是设备上下文句柄 HDC hdc = /* ... */; RECT clearRect; SetRect(&clearRect, 120, 120, 280, 180); // left, top, right, bottom // 1. 获取背景画刷(通常是白色) HBRUSH hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH); // 2. 用画刷填充矩形 FillRect(hdc, &clearRect, hBrush);
如何自己实现一个 clearrectangle 函数
如果你在一个没有现成 clearrectangle 的环境中(比如一个简单的自定义绘图引擎),你可以自己实现它,实现原理非常简单:画一个实心矩形。
下面是一个使用 EasyX图形库(一个在Windows上流行的类BGI库)的示例,它完美地展示了如何实现这个功能。
EasyX 本身就有 clearrectangle,但我们可以不用它,而是用更基础的 setfillstyle 和 bar 来模拟,以展示其原理。
自己实现的 clearrectangle 函数
#include <graphics.h> // EasyX 头文件
#include <conio.h>
// 自定义的 clearrectangle 函数
// 功能:用指定的颜色填充一个矩形区域
void my_clearrectangle(int left, int top, int right, int bottom, int clear_color) {
// 1. 保存当前的前景色和背景色
int original_color = getcolor();
// 2. 设置要用来“清除”的颜色为前景色
setcolor(clear_color);
// 3. 设置填充样式为实心
setfillstyle(SOLID_FILL, clear_color);
// 4. 画一个实心矩形来“清除”区域
// bar函数画的是从(left, top)到(right-1, bottom-1)的矩形
bar(left, top, right - 1, bottom - 1);
// 5. (可选)恢复原来的前景色
setcolor(original_color);
}
int main() {
// 初始化 EasyX 图形窗口
initgraph(640, 480);
// 画一个绿色的圆
setfillstyle(SOLID_FILL, GREEN);
circle(300, 200, 50);
floodfill(300, 200, GREEN);
_getch(); // 按任意键继续
// 调用我们自己实现的函数,用白色“清除”一个矩形区域
my_clearrectangle(250, 150, 350, 250, WHITE);
_getch(); // 按任意键退出
closegraph();
return 0;
}
实现逻辑分解:
- 参数: 函数需要知道矩形的坐标和要用来清除的颜色。
- 设置颜色: 将绘图的前景色设置为清除颜色。
- 设置填充样式: 使用
setfillstyle将填充模式设置为SOLID_FILL(实心)。 - 绘制矩形: 调用
bar()函数,它会用当前的前景色和填充样式画一个实心矩形,从而覆盖掉原来的内容。 - 恢复状态 (良好习惯): 如果需要,可以恢复程序之前设置的颜色。
| 特性 | 描述 |
|---|---|
| 存在性 | clearrectangle 不是 C标准库函数。 |
| 主要来源 | 来自于 BGI (Borland Graphics Interface),用于 Turbo C/C++ 等旧环境。 |
| 功能 | 用当前背景色填充一个矩形区域,实现局部“清除”效果。 |
| 现代替代 | 在 |
