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

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

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(); }

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

http://www.jsqmd.com/news/1125233/

相关文章:

  • Cadence 17.2 焊盘设计:从Flash Symbol创建到通孔焊盘集成的5步流程
  • DeepSeek-V2与V2.5技术对比:数学推理与代码生成能力实测
  • 基于PQ功率控制的三相并网逆变器仿真、锁相环PWM控制,附参考文献
  • Linux 服务器访问控制:组合使用 PAM wheel 组与 iptables 限制 SSH 来源
  • WIN10任务栏日期隐藏年显示星期几
  • uos-network-exporter与Grafana集成:打造可视化网络监控仪表板
  • PCA主成分分析法:数据降维与特征提取实战指南
  • AI 写作版本对比:别只问哪版更好,要问哪里变了
  • 重复视频清理工具 MD5+关键帧双重识别 智能查重去重 下载
  • 数据集切分策略:随机划分不一定适合时间序列任务
  • 天伟生物专利涉及圈养匹配与选址,养猪户了解技术方案要点
  • web安全代码基础-PHP(防护过滤操作)
  • 2026年联发科嵌入式岗位高频面试题带参考答案
  • OCamCalib 工具箱 v1.0:鱼眼相机标定 8 步实操,平均重投影误差 < 0.5 像素
  • Behat API测试实战:从配置陷阱到复杂场景编排的避坑指南
  • 一次OTA固件签名绕过事件的排查复盘
  • 电脑错误dll修复工具 运行库工具修复dll 缺失找不到dll丢失问题
  • 3D医学影像分割:基于TotalSegmentator等5个公开数据集的模型训练实战
  • 当“遇见小面”商标遇见“渝见小面”!
  • 图数据库与知识图谱构建实战
  • Linux /etc/fstab 配置详解:5个关键参数避免重启后挂载回退只读
  • 3个关键步骤让AirPods在Windows上重获完整功能:AirPodsDesktop终极解决方案
  • TwinCAT3实战:台达A2伺服扭矩读取与参数优化指南
  • 高清图像数据集 DIV2K 与 Flickr2K 超分实战:1900张图像预处理与数据增强3种策略
  • 软件测试面试总结分享
  • Rmarkdown动态文档创作与数据科学报告实战指南
  • 大疆 M3508 电机速度 PID 调参实战:从振荡到稳定,3 组参数对比分析
  • 【全网大测评】有没有降AI率的靠谱软件推荐?2026年亲测15款降AI率工具,帮你避坑省钱!
  • Go 微服务限流:别把所有请求都堵在入口
  • 多接地配电系统的基于PMU的系统状态估计附Matlab代码