当前位置: 首页 > news >正文

EasyX学习笔记1:线条

目录

  • 一、线条颜色
    • 1. `setlinecolor` - 设置当前线条颜色
    • 2. `getlinecolor` - 获取当前线条颜色
  • 二、线条样式
    • 1. `setlinestyle` - 设置线条样式(宽度、类型等)
  • 三、绘制线条
    • 1. `line` - 绘制两点间直线
    • 2. `lineto` - 从当前位置画线到指定点
    • 3. `linerel` - 相对当前位置画线
    • 4. `polyline` - 绘制多段线
  • 四、其他函数
    • 1. `getlinestyle` - 获取当前线条样式
    • 2. `setwritemode` - 设置线条绘制模式
  • 五、注意事项
  • 六、综合示例

一、线条颜色

1. setlinecolor - 设置当前线条颜色

函数原型

void setlinecolor(COLORREF color);

参数

  • color:线条颜色,使用 RGB(r, g, b) 宏或预定义颜色常量(如 REDBLUE)。

示例

setlinecolor(RED);      // 设置为红色
setlinecolor(RGB(0, 255, 0)); // 设置为绿色

2. getlinecolor - 获取当前线条颜色

函数原型

COLORREF getlinecolor();

二、线条样式

1. setlinestyle - 设置线条样式(宽度、类型等)

函数原型

void setlinestyle(
    int style,          // 线型(如 PS_SOLID, PS_DASH)
    int thickness = 1,  // 线宽(像素)
    const DWORD *puserstyle = NULL, // 自定义虚线模式(需与 PS_USERSTYLE 配合)
    DWORD userstylecount = 0
);

或使用结构体 LINESTYLE(推荐):

struct LINESTYLE {
    int style;          // 线型
    int thickness;      // 线宽
    DWORD *puserstyle;  // 自定义虚线模式
    DWORD userstylecount;
};
void setlinestyle(const LINESTYLE *pstyle);

参数说明

  • 线型常量

    • PS_SOLID:实线(默认)
    • PS_DASH:虚线(线宽需为1)
    • PS_DOT:点线(线宽需为1)
    • PS_DASHDOT:点划线
    • PS_USERSTYLE:自定义虚线模式
  • 端点样式

    • PS_ENDCAP_ROUND 端点为圆形。
    • PS_ENDCAP_SQUARE 端点为方形。
    • PS_ENDCAP_FLAT 端点为平坦。
  • 连接样式

    • PS_JOIN_BEVEL 连接处为斜面。
    • PS_JOIN_MITER 连接处为斜接。
    • PS_JOIN_ROUND 连接处为圆弧。
  • 自定义虚线
    通过 puserstyle 数组定义交替的虚实段长度(如 {5, 3} 表示5像素实线 + 3像素空白)。

示例

// 设置红色虚线,线宽1
setlinestyle(PS_DASH, 1);
// 自定义虚线模式:10像素实线 + 5像素空白
DWORD style[] = {10, 5};
LINESTYLE ls = {PS_USERSTYLE, 1, style, 2};
setlinestyle(&ls);

三、绘制线条

1. line - 绘制两点间直线

函数原型

void line(int x1, int y1, int x2, int y2);
void line(POINT pt1, POINT pt2); // 使用 POINT 结构体

示例

line(10, 20, 100, 200); // 从 (10,20) 到 (100,200) 画线

2. lineto - 从当前位置画线到指定点

函数原型

void lineto(int x, int y);
void lineto(POINT pt);

需配合 moveto 使用

moveto(50, 50);   // 移动起点到 (50,50)
lineto(200, 100); // 画线到 (200,100)

3. linerel - 相对当前位置画线

函数原型

void linerel(int dx, int dy);

示例

moveto(100, 100);
linerel(50, -30); // 从 (100,100) 画到 (150,70)

4. polyline - 绘制多段线

函数原型

void polyline(const POINT *points, int num);

示例

POINT pts[] = {{10,10}, {50,30}, {100,80}, {200,10}};
polyline(pts, 4); // 依次连接4个点

四、其他函数

1. getlinestyle - 获取当前线条样式

函数原型

LINESTYLE getlinestyle();

2. setwritemode - 设置线条绘制模式

函数原型

void setwritemode(int mode); // 如 R2_XORPEN(异或模式)

五、注意事项

  1. 虚线限制PS_DASHPS_DOT 仅在 thickness = 1 时有效。
  2. 自定义虚线:需与 PS_USERSTYLE 配合,数组长度应为偶数。

六、综合示例

#include <graphics.h>
#include <conio.h>
int main() {
    initgraph(640, 480); // 初始化窗口
    setbkcolor(WHITE);
    cleardevice();
    setlinecolor(RED);
    line(50, 50, 200, 50); // 绘制红色实线

    // 设置虚线样式
    LINESTYLE ls;
    ls.style = PS_DASH;
    ls.thickness = 1;
    setlinestyle(&ls);
    line(50, 100, 200, 100); // 绘制红色虚线

    // 使用异或模式绘制线条
    setwritemode(R2_XORPEN);
    setlinecolor(GREEN);
    line(50, 150, 200, 150); // 第一次绘制
    line(50, 150, 200, 150); // 第二次绘制会擦除

    _getch();
    closegraph();
    return 0;
}

建议结合官方文档和实际代码练习加深理解。
官方:EasyX文档 - 绘图

相关文章:

  • C# struct, class的区别
  • 算法与数据结构(除自身以外数组的乘积)
  • 第2章:进阶格式与结构化元素
  • 如何利用PLM软件有效地推进制造企业标准化工作?
  • 1.综述 Google 的软件工程读书笔记
  • Golang Model 字段自动化校验设计
  • WEB安全--SQL注入--常见的注入手段
  • cv2.Sobel
  • 构建现代微服务安全体系:Spring Security、JWT 与 Spring Cloud Gateway 实践
  • 如何在 IntelliJ IDEA 中使用 Bito AI 插件
  • C++编程,#include <iostream>详解,以及using namespace std;作用
  • Android的Activity生命周期知识点总结,详情
  • ML.Net二元分类
  • spring boot 对接aws 的S3 服务,实现上传和查询
  • vue3.x 自定义hook函数详细解读
  • CAS单点登录(第7版)18.日志和审计
  • Java:单例模式(Singleton Pattern)及实现方式
  • sql sqlserver的特殊函数COALESCE和PIVOT的用法分析
  • 理解 WebGPU 中的 navigator.gpu 和 adapter:从浏览器到显卡的旅程
  • 视频编码标准(H.264/AVC、H.265/HEVC、AV1、MPEG-2 和 MPEG-4 Part 2)
  • 人民网:激发博物馆创新活力,让“过去”拥有“未来”
  • 知名中医讲师邵学军逝世,终年51岁
  • 证监会强化上市公司募资监管七要点:超募资金不得补流、还贷
  • 一图看懂|印巴交火后,双方基地受损多少?
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?
  • 巴方:印度上周导弹袭击造成至少40名平民死亡