1.前言
道路千万条,安全第一条,行车不规范,亲人两行泪。应粉丝要求,今天继续使用昨天使用的函数,写一个实习车贴。
该实习车贴的绘制很简单,首先绘制一个黄色的填充圆,然后在这个填充圆上绘制两个圆环。使用drawtext函数将实习二字写到填充圆的正中间。最后使用圆圈文字函数,将我们要提示的东西展示出来。
这里简单介绍一下这个输出一圈汉字的函数
void DrawCircle(
TCHAR str,
int variable,
int fors,
int R,
int MYX,
int MYY,
double QSHD,
int size
);
参数
str
用于绘制的字符
variable
用于展示的第几个字符
fors
总共有几个字符需要展示
R
展示字符围成圆的半径
MYX
展示字符圆的x坐标
MYY
展示字符圆的y坐标
QSHD
展示字符圆需要调整的起始弧度
size
展示字符的字体大小
返回值
无。
2.源码分享
///////////////////////////////////////////////////
// 程序名称:绘制实习车贴
// 编译环境:Mictosoft Visual Studio 2022, EasyX_20200315(beta)
// 公 众 号:C语言研究
// 作 者:luoyh <2864292458@qq.com>
// 最后修改:2022-5-27
//
void DrawCircle(TCHAR str, int variable, int fors, int R, int MYX, int MYY, double QSHD, int size);
int main()
{
initgraph(W,H);
setbkcolor(WHITE);
cleardevice();
setfillcolor(YELLOW);
setbkmode(TRANSPARENT);
solidcircle(W / 2, H / 2, 350);
setlinestyle(PS_SOLID,5);
setlinecolor(RGB(254,0,0));
circle(W / 2, H / 2, 250);
settextcolor(RGB(254, 0, 0));
settextstyle(250,0,_T("楷体"));
RECT r = { 0, 0, W, H};
drawtext(_T("实习"), &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
setlinestyle(PS_SOLID, 15);
circle(W / 2, H / 2, 350);
TCHAR str[25];
for (int i = 0; i < 16; i++)
{
str[0] = L"车内有娃实习司机出入平安保持车距"[15 - i];
DrawCircle(str[0], i, 16, 370, W / 2, H / 2, 0, 70);
}
_getch();
}
void DrawCircle(TCHAR str, int variable, int fors, int R, int MYX, int MYY, double QSHD, int size)
{
double a, x0, y0, w, h, x1, y1;
int x, y;
settextstyle(size, 0, L"楷体", variable * 3600 / fors - 900, variable * 3600 / fors - 900, 0, false, false, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH);
a = variable * PI * 2 / fors - QSHD;
w = textwidth(str); // 计算字符串宽 w、高 h
h = textheight(str);
x1 = R * cos(a); // 计算输出字符串的左上角位置
y1 = R * sin(a);
x0 = x1 * cos(-a) - y1 * sin(-a); // 将字符串绕原点顺时针旋转 a 弧度
y0 = y1 * cos(-a) + x1 * sin(-a);
x0 -= w / 2; // 将字符串向左上偏移 w/2、h/2
y0 += h / 2; // 绘图坐标向下为正
x = (int)(x0 * cos(a) - y0 * sin(a)); // 将字符串绕原点逆时针旋转 a 弧度
y = (int)(y0 * cos(a) + x0 * sin(a));
outtextxy(int(MYX + x + 0.5), int(MYY - y + 0.5), str); // 绘图坐标向下为正
}
3.效果展示