1、下载安装 WinBGIm 库
WinBGIm(Windows Borland Graphics Interface Library for MinGW)库是一个用于在 Windows 上运行 BGI(Borland Graphics Interface)程序的图形库。它是为 MinGW 编译器设计的,但也兼容其他一些编译器。WinBGIm 是 Borland C++ 的 BGI 图形库的一个移植版本,允许在现代 Windows 环境中使用传统的 BGI 图形功能。
下载地址:
https://winbgim.codecutter.org/
https://github.com/ahmedshakill/WinBGIm-64/releases/tag/v1.0.1
下载的压缩包中提取文件。可以获得多个文件,包括 graphics.h
、winbgim.h
和 libbgi.a
。
2、配置 Code::Blocks
1)复制头文件和库文件
将 graphics.h 和 winbgim.h 复制到 Code::Blocks 的 include 目录中,通常位于:
C:\Program Files (x86)\CodeBlocks\MinGW\include
将 libbgi.a
复制到 Code::Blocks 的 lib
目录中,通常位于:
C:\Program Files (x86)\CodeBlocks\MinGW\lib
2)配置编译器和链接器
打开 Code::Blocks。创建一个新的控制台应用程序项目。在项目中,右键点击项目名称,选择 Build options。在 Linker settings 选项卡中,点击 Add 按钮,并添加 libbgi.a
。
在 Other linker options 中,添加以下内容:
-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
3、项目代码
用于绘制圆盘时钟的完整代码,如下,
#include <graphics.h> #include <math.h> #include <time.h> #include <stdio.h> #define PI 3.14159 void drawClockFace(int xCenter, int yCenter, int radius) { // 画圆 circle(xCenter, yCenter, radius); // 画小时刻度 for (int i = 0; i < 12; i++) { int angle = i * 30; // 360 / 12 = 每小时30度 int xOuter = xCenter + (radius - 10) * cos(angle * PI / 180); int yOuter = yCenter + (radius - 10) * sin(angle * PI / 180); int xInner = xCenter + (radius - 20) * cos(angle * PI / 180); int yInner = yCenter + (radius - 20) * sin(angle * PI / 180); line(xOuter, yOuter, xInner, yInner); } } void drawHand(int xCenter, int yCenter, int length, double angle) { int x = xCenter + length * cos(angle); int y = yCenter + length * sin(angle); line(xCenter, yCenter, x, y); } void updateClock(int xCenter, int yCenter, int radius) { time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); int hours = timeinfo->tm_hour % 12; int minutes = timeinfo->tm_min; int seconds = timeinfo->tm_sec; // 将当前时间转换为角度 double hourAngle = (hours + minutes / 60.0) * 30 * PI / 180 - PI / 2; double minuteAngle = (minutes + seconds / 60.0) * 6 * PI / 180 - PI / 2; double secondAngle = seconds * 6 * PI / 180 - PI / 2; // 画时钟指针 setcolor(WHITE); drawHand(xCenter, yCenter, radius - 50, hourAngle); drawHand(xCenter, yCenter, radius - 20, minuteAngle); setcolor(RED); drawHand(xCenter, yCenter, radius - 10, secondAngle); } int main() { int gd = DETECT, gm; initgraph(&gd, &gm, ""); int xCenter = getmaxx() / 2; int yCenter = getmaxy() / 2; int radius = 200; while (!kbhit()) { cleardevice(); drawClockFace(xCenter, yCenter, radius); updateClock(xCenter, yCenter, radius); delay(1000); } closegraph(); return 0; }
效果如下: