SetPenColor 不是C语言标准库(ANSI C)中的函数,它是一个特定图形库提供的函数,主要用于在控制台或简单的图形界面中设置后续绘制操作的颜色。

最常见的来源是 BGI (Borland Graphics Interface),这是在古老的 Turbo C / Borland C++ 编译器中使用的图形库,一些现代的跨平台库(如 EasyX 或 WinBGIm)为了兼容性或易用性,也提供了这个函数。
要使用 SetPenColor,你必须:
- 包含对应的头文件(如
graphics.h)。 - 初始化图形模式。
- 链接对应的图形库文件。
SetPenColor 的作用
顾名思义,SetPenColor 的作用是设置“画笔”的颜色,当你调用这个函数后,之后所有绘制的图形(如线条、矩形、圆形、文本等)都将使用你设置的颜色,直到你再次调用 SetPenColor 改变它。
它通常与 SetFillColor 函数配对使用:

SetPenColor()/SetLineColor(): 设置图形的边框/轮廓颜色。SetFillColor(): 设置图形的内部填充颜色。
如何使用 SetPenColor(以 BGI/EasyX 为例)
下面我们通过两个主流的图形库来展示具体用法。
使用 BGI (在 Turbo C 或 DOSBox 环境中)
这是 SetPenColor 最经典的环境。
步骤:
- 包含头文件
#include <graphics.h>。 - 调用
initgraph()初始化图形窗口,你需要指定窗口的宽度和高度。 - 调用
SetPenColor(color)设置颜色。 - 使用绘图函数(如
line(),circle()等)进行绘制。 - 调用
getch()等待用户按键,防止程序一闪而过。 - 调用
closegraph()关闭图形模式,返回控制台。
示例代码 (Turbo C):
#include <graphics.h>
#include <conio.h> // 用于 getch()
int main() {
// 1. 初始化图形模式
// DETECT 是一个宏,让系统自动检测适合的图形驱动
int gd = DETECT, gm;
initgraph(&gd, &gm, "");
// 2. 设置画笔颜色为红色
SetPenColor(RED);
// 3. 画一条红色的线
line(100, 100, 400, 100);
// 4. 设置画笔颜色为绿色
SetPenColor(GREEN);
// 5. 画一个绿色的矩形边框
rectangle(150, 150, 350, 250);
// 6. 设置填充颜色为蓝色
SetFillColor(BLUE);
// 7. 画一个蓝色的填充圆
// 注意:fillcircle 是一个填充函数,它会同时设置边框和填充色
// 如果想分别设置,先用 setfillstyle 设置填充模式,floodfill
circle(250, 350, 50);
floodfill(250, 350, GetPixel(250, 350)); // GetPixel 获取当前点的颜色(即画笔颜色)
// 8. 等待用户按键
getch();
// 9. 关闭图形模式
closegraph();
return 0;
}
颜色常量:
在 BGI 中,颜色通常使用预定义的宏来表示,
BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE。
使用 EasyX (在 Visual Studio 现代环境中)
EasyX 是一个流行的 Windows 平台下的图形库,它借鉴了 BGI 的风格,也提供了 SetPenColor 函数,使其对初学者非常友好。
步骤:
- 在 Visual Studio 中创建一个“Windows 桌面应用”项目。
- 通过 “项目” -> “属性” -> “配置属性” -> “链接器” -> “输入” -> “附加依赖项” 中,添加
EasyX.lib。 - 包含头文件
#include <graphics.h>。 - 调用
initgraph()初始化窗口。 - 调用
SetPenColor()和绘图函数。 - 调用
getch()等待。 - 调用
closegraph()关闭窗口。
示例代码 (EasyX for Visual Studio):
#include <graphics.h> // EasyX 头文件
#include <conio.h> // 用于 getch()
int main() {
// 1. 初始化图形窗口,创建一个 640x480 的窗口
initgraph(640, 480);
// 2. 设置画笔颜色为红色 (COLORREF 类型)
// EasyX 中颜色通常用 RGB 宏或预定义颜色
SetPenColor(RGB(255, 0, 0)); // 红色
// 3. 画一条红色的线
line(100, 100, 500, 100);
// 4. 设置画笔颜色为绿色
SetPenColor(GREEN); // EasyX 也支持一些预定义颜色
// 5. 画一个绿色的矩形
rectangle(150, 150, 450, 300);
// 6. 设置填充颜色为蓝色
SetFillColor(BLUE);
// 7. 画一个蓝色的填充圆
// EasyX 的 fillcircle 会直接填充
fillcircle(320, 400, 50);
// 8. 在屏幕上输出文字,文字颜色也由 SetPenColor 设置
SetPenColor(WHITE);
outtextxy(10, 10, _T("按任意键关闭窗口..."));
// 9. 等待用户按键
_getch(); // 在 EasyX 中推荐使用 _getch
// 10. 关闭图形窗口
closegraph();
return 0;
}
颜色表示:
EasyX 的颜色核心是 COLORREF 类型,通常用 RGB(r, g, b) 宏来创建,r, g, b 是 0-255 之间的值,它也兼容一些 BGI 风格的颜色常量。
现代C++/C的替代方案
如果你使用的是现代C++或不想依赖这些老旧的库,可以考虑使用更现代的图形库,如:
- SFML (Simple and Fast Multimedia Library): C++库,功能强大,跨平台,社区活跃。
- Raylib: C语言库,非常轻量,易于上手,专注于游戏和图形应用。
- Qt: 一个功能极其强大的C++框架,可以创建复杂的GUI应用程序。
这些库通常不叫 SetPenColor,而是采用更面向对象或更灵活的方式,在 Raylib 中,你会这样做:
// Raylib 示例
#include "raylib.h"
#include <stdio.h>
int main(void)
{
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raylib simple example");
while (!WindowShouldClose())
{
BeginDrawing();
ClearBackground(RAYWHITE); // 每一帧都清空屏幕
// 设置画笔颜色(实际上是设置绘制文本的颜色)
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
// 画一条线,线的颜色直接作为参数传入
DrawLine(100, 100, 400, 100, RED);
EndDrawing();
}
CloseWindow();
return 0;
}
| 特性 | SetPenColor (BGI/EasyX) |
现代库 (如 Raylib/SFML) |
|---|---|---|
| 来源 | 非标准,特定于图形库 | 标准或现代库设计 |
| 易用性 | 非常简单,适合初学者 | 稍复杂,但更灵活强大 |
| 环境 | Turbo C, DOSBox, Visual Studio (EasyX) | 跨平台 (Windows, Linux, macOS) |
| 适用场景 | 学习计算机图形学基础、简单的控制台绘图 | 游戏开发、现代GUI应用、严肃项目 |
如果你是初学者,想快速在C语言中画图,使用 EasyX 是一个非常好的选择,因为它保留了 SetPenColor 这种直观的函数。 如果你的目标是进行更专业或跨平台的项目,建议学习如 Raylib 这样的现代库。
