)
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, xweight-1, yheight-1); outtextxy(tx, ty, text); } if (way R) {//如果是R则绘制有圆角的按钮(Button)也就是有圆角的矩形 solidroundrect(x, y, xweight-1, yheight-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, xweight-1, yheight-1); outtextxy(tx, ty, text); } if (way R) { solidroundrect(x, y, xweight-1, yheight-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(); }最后感谢大家的观看如果有什么问题可以在评论区指出或私信我。谢谢