核心要点
最重要的一点是:setcolor() 并不是标准 C 语言库(ANSI C)的一部分。

它是一个特定于图形库的函数,在不同的图形库中,它的功能和用法可能略有不同,最常见的 setcolor() 函数出现在以下两个环境中:
- Turbo C / Borland C++ (老式 DOS 环境)
- graphics.h 库 (在一些现代的跨平台图形库中,如 WinBGIM)
下面我们主要以最经典的 Turbo C 为例来讲解,因为它的使用最为广泛和典型。
在 Turbo C / DOS 环境中的 setcolor()
这个函数用于在图形模式下设置当前绘图的颜色。
函数原型
void setcolor(int color);
参数说明
color: 一个整数值,代表要设置的颜色,这个值不是随意的,它对应一个预定义的颜色常量或颜色编号。
颜色常量
在 graphics.h 头文件中,定义了一系列的颜色常量,你也可以直接使用它们的整数值。

| 颜色常量 | 整数值 | 中文名称 | 英文名称 |
|---|---|---|---|
BLACK |
0 | 黑色 | Black |
BLUE |
1 | 蓝色 | Blue |
GREEN |
2 | 绿色 | Green |
CYAN |
3 | 青色 | Cyan |
RED |
4 | 红色 | Red |
MAGENTA |
5 | 洋红色 | Magenta |
BROWN |
6 | 棕色 | Brown |
LIGHTGRAY |
7 | 浅灰色 | Light Gray |
DARKGRAY |
8 | 深灰色 | Dark Gray |
LIGHTBLUE |
9 | 亮蓝色 | Light Blue |
LIGHTGREEN |
10 | 亮绿色 | Light Green |
LIGHTCYAN |
11 | 亮青色 | Light Cyan |
LIGHTRED |
12 | 亮红色 | Light Red |
LIGHTMAGENTA |
13 | 亮洋红色 | Light Magenta |
YELLOW |
14 | 黄色 | Yellow |
WHITE |
15 | 白色 | White |
功能
调用 setcolor() 后,之后所有绘制的图形(如 line(), circle(), rectangle() 等)都将使用这个新设置的颜色。
重要概念:背景色
setcolor() 设置的是前景色,也就是图形本身的颜色,背景色由另一个函数 setbkcolor() 设置。
示例代码
这是一个完整的 Turbo C 程序,演示了如何使用 setcolor() 来绘制不同颜色的线条。
#include <graphics.h>
#include <conio.h> // 用于 getch()
int main() {
// 1. 初始化图形驱动
int gd = DETECT, gm;
initgraph(&gd, &gm, "C:\\TC\\BGI"); // 请确保你的 BGI 文件路径正确
// 2. 设置背景色为黑色
setbkcolor(BLACK);
// 3. 使用 setcolor() 设置不同的颜色并绘制线条
// 设置颜色为红色,画一条线
setcolor(RED);
line(50, 50, 250, 50);
// 设置颜色为绿色,画一个矩形
setcolor(GREEN);
rectangle(50, 100, 250, 200);
// 设置颜色为蓝色,画一个圆
setcolor(BLUE);
circle(150, 300, 50);
// 设置颜色为黄色,画一个椭圆
setcolor(YELLOW);
ellipse(150, 400, 0, 360, 80, 40);
// 4. 等待用户按键
getch();
// 5. 关闭图形模式,返回文本模式
closegraph();
return 0;
}
代码解释:

#include <graphics.h>: 包含图形库的头文件。initgraph(&gd, &gm, "path"): 初始化图形环境。DETECT会自动检测最佳图形驱动。setbkcolor(BLACK): 将屏幕背景设置为黑色,让彩色线条更明显。setcolor(RED): 将当前绘图颜色设置为红色。line(...): 使用当前颜色(红色)画一条从 (50, 50) 到 (250, 50) 的直线。- 后续的
setcolor()调用改变了绘图颜色,所以后续图形会使用新的颜色。 getch(): 暂停程序,等待用户按下任意键,以便能看到图形窗口。closegraph(): 关闭图形窗口,程序结束。
在现代 C 语言环境中的情况
在现代的 Windows、Linux 或 macOS 上,你无法直接使用 graphics.h 和 setcolor(),你需要使用更现代的图形库或 API。
Windows API
在 Windows 平台下,可以使用 Win32 GDI (Graphics Device Interface) 来实现类似功能,虽然没有直接叫 setcolor() 的函数,但逻辑是相通的。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
HWND hwnd = CreateWindow("STATIC", "GDI Color Example", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
NULL, NULL, hInstance, NULL);
HDC hdc = GetDC(hwnd);
// 设置画笔颜色 (类似 setcolor)
HPEN hPen = CreatePen(PS_SOLID, 5, RGB(255, 0, 0)); // 创建一支红色画笔
HPEN hOldPen = SelectObject(hdc, hPen); // 选中画笔
// 画一条线
MoveToEx(hdc, 50, 50, NULL);
LineTo(hdc, 350, 50);
// 设置画刷颜色 (类似设置填充色)
HBRUSH hBrush = CreateSolidBrush(RGB(0, 255, 0)); // 创建一个绿色画刷
HBRUSH hOldBrush = SelectObject(hdc, hBrush);
// 画一个填充矩形
Rectangle(hdc, 50, 100, 350, 200);
// 清理资源
SelectObject(hdc, hOldPen);
SelectObject(hdc, hOldBrush);
DeleteObject(hPen);
DeleteObject(hBrush);
ReleaseDC(hwnd, hdc);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
对比:
setcolor()的功能被CreatePen()和SelectObject()替代了。- 你需要创建一个对象(画笔
HPEN或画刷HBRUSH),然后用SelectObject()将它选入设备上下文HDC中,之后绘图操作就会使用这个对象。
其他现代图形库
对于跨平台的图形开发,通常会使用以下库,它们都有自己的颜色设置方法:
- SDL (Simple DirectMedia Layer):
SDL_SetRenderDrawColor(renderer, r, g, b, a); - SFML (Simple and Fast Multimedia Library):
sf::CircleShape shape(50.f); shape.setFillColor(sf::Color::Red); - OpenGL:
glColor3f(r, g, b);(现代OpenGL使用着色器,颜色设置方式不同)
| 特性 | Turbo C setcolor() |
现代 API (如 Win32 GDI) |
|---|---|---|
| 所属库 | graphics.h (非标准) |
Win32 API, OpenGL, SDL, SFML 等 |
| 环境 | DOS / 16-bit Windows | Windows, Linux, macOS 等 |
| 功能 | 设置当前绘图颜色 | 通过创建和选择对象(画笔、画刷)来设置颜色 |
| 易用性 | 非常简单,一个函数搞定 | 相对复杂,涉及设备上下文和对象管理 |
| 现状 | 已过时,主要用于教学和怀旧 | 是现代图形编程的标准做法 |
如果你正在学习 C 语言并且遇到了 setcolor(),那么你几乎可以肯定是在一个学习环境(如学校课程、旧版教材)或使用Turbo C / Borland C++ 编译器,对于任何现代的、严肃的 C/C++ 项目,都应该学习使用平台相关的 API(如 Win32)或跨平台图形库(如 SDL, SFML)。
