尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

用EasyX库写一个按钮函数(Button)

用EasyX库写一个按钮函数(Button)
📅 发布时间:2026/7/5 1:41:04

EasyX是一个很出名的C++图形库,它的功能丰富。在我用它来做小游戏的时候,我发现它没有直接的按钮函数,如果要画弄按钮来会很费劲,因为后期还要检测和判断鼠标或键盘的一些事件,分开来操作会很麻烦,那能不能自己写一个函数呢?一个可以把那些繁琐的步骤缩减的Button函数?

当然可以,我经过许多此次修改(后期如果有问题还会修改),最后写出了一个Button函数,函数很简单,我还配备了用法(有批注):

1、首先是定义函数:

//定义 void button(int x, int y, int weight, int height, string way, int r = 0, int tx = 0, int ty = 0, const char* text = "", COLORREF c = WHITE) { //函数定义的值分别是:左上角横坐标,左上角纵坐标,宽度,高度,是否圆角(赋值"R"为圆角,赋值"G"则不做圆角处理),圆角半径,文本横坐标,文本纵坐标,文本内容,按钮颜色(以上所有int类型的值,单位都为:1像素) COLORREF in = getfillcolor();//先获取当前(原先)的填充颜色,用于备份,因为后面会篡改填充颜色用于绘制按钮 setfillcolor(c);//设置按钮(Button)填充颜色 if (way == "G") {//如果是"G",则绘制无圆角的按钮(Button),也就是无圆角的矩形 solidrectangle(x, y, x+weight-1, y+height-1); outtextxy(tx, ty, text); } if (way == "R") {//如果是"R",则绘制有圆角的按钮(Button),也就是有圆角的矩形 solidroundrect(x, y, x+weight-1, y+height-1, r, r); outtextxy(tx, ty, text); } setfillcolor(in);//用备份好的填充颜色变量恢复之前被篡改的填充颜色,防止对Button函数外需要填充的步骤产生影响 }

2、然后是用法:

//用法 ExMessage Mou_N;//定义消息结构体,在这里用于获取鼠标信息(ExMessage为消息结构体,来自"easyx.h") struct mouse{ int x; int y; }mou;//然后创建用于储存鼠标坐标的结构体(x,y) button(300, 720, 400, 780, "R", 30, 305 , 745, "Click", GREEN);//绘制按钮(里面的数据为示例) while (true) { BeginBatchDraw();//开始批量绘图 peekmessage(&Mou_N); if (Mou_N.message == WM_MOUSEMOVE) {//如果鼠标移动,获取鼠标坐标 mou.x = Mou_N.x; mou.y = Mou_N.y; } if (mou.x >= 300 and mou.x <= 400 and mou.y >= 720 and mou.y <= 780) {//判断鼠标是否移到指定位置(if语句中的数值为示例) button(300, 720, 400, 780, "R", 30, 305, 745, "Click", RED);//如果移到指定位置,改变按钮(Button)颜色。(这里改变的颜色是RED) if (Mou_N.message == WM_LBUTTONDOWN) {//判断鼠标是否点击 //如果满足,则执行if语句里的内容(总结:按钮被点击) } } else { button(300, 720, 400, 780, "R", 30, 305 , 745, "Click", GREEN);//如果只是移到指定的位置,但没被点击,按钮(Button)保持原来的状态。(这里原色是GREEN) } FlushBatchDraw();//结束批量绘制 }

如果大家想要方便套用模板,这里我也给大家搞了一个没有批注的:

1、定义:

void button(int x, int y, int weight, int height, string way, int r = 0, int tx = 0, int ty = 0, const char* text = "", COLORREF c = WHITE) { COLORREF in = getfillcolor(); setfillcolor(c); if (way == "G") { solidrectangle(x, y, x+weight-1, y+height-1); outtextxy(tx, ty, text); } if (way == "R") { solidroundrect(x, y, x+weight-1, y+height-1, r, r); outtextxy(tx, ty, text); } setfillcolor(in); }

2、用法:

ExMessage Mou_N; struct mouse{ int x; int y; }mou; button(300, 720, 400, 780, "R", 30, 305 , 745, "Click", GREEN); while (true) { BeginBatchDraw(); peekmessage(&Mou_N); if (Mou_N.message == WM_MOUSEMOVE) { mou.x = Mou_N.x; mou.y = Mou_N.y; } if (mou.x >= 300 and mou.x <= 400 and mou.y >= 720 and mou.y <= 780) { button(300, 720, 400, 780, "R", 30, 305, 745, "Click", RED); if (Mou_N.message == WM_LBUTTONDOWN) { } } else { button(300, 720, 400, 780, "R", 30, 305 , 745, "Click", GREEN); } FlushBatchDraw(); }

最后,感谢大家的观看,如果有什么问题可以在评论区指出或私信我。谢谢!!!

相关新闻

  • 基于PQ功率控制的三相并网逆变器仿真、锁相环PWM控制,附参考文献
  • Android随笔-启动Zygote的rc文件是什么?
  • 重复视频清理工具 MD5+关键帧双重识别 智能查重去重 下载

最新新闻

  • 如何快速掌握SysML v2:面向系统工程师的终极MBSE建模指南
  • 搞懂视图!MySQL 数据表、视图核心差异实战总结
  • Linux top/ps 命令实战:5分钟定位CPU 100%与内存泄漏的进程
  • 旋转向量,旋转矩阵,四元数,欧拉角之间的转换公式
  • C++ STL 容器底层实现与迭代器失效规则总结
  • AI替代人力是假象?微软派6000人驻场,Ford召回老工程师,人力价值凸显!

日新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号