用EasyX写了一个按钮组件,包括他的外观和响应。。。其他的组件也能写,以后有空慢慢写吧。
以下是第一版代码,有点简陋而且不完善,哈哈哈。
1.禁止在按钮触发事件中加入Sleep这样的函数,会导致鼠标和键盘都检测不到了
2.为什么会那样,因为我用的其实还是那套while轮询的东西。。。必须运行完了触发事件才会继续检测输入
3.加入了超椭圆
头文件
//头文件:UI_set.h
#ifndef _H_UI_SET
#define _H_UI_SET
#define WIDTH 600//画面宽度
#define HEIGHT 480//画面宽度
//背景色
#define BACKGROUND_COLOR_RED 80
#define BACKGROUND_COLOR_GREEN 80
#define BACKGROUND_COLOR_BLUE 80
//背景模式
#define BACKGROUND_MODE 200 //透明
//#define BACKGROUND_MODE "OPAQUE" //不透明
void InitEasyx(void);//初始化绘图环境
void superCircle(int R, int Center_x, int Center_y, double n, int Color[3]);//超椭圆
#endif
//头文件:UI_component.h
#ifndef H_UI_COMPONENT
#define H_UI_COMPONENT
class Button
{
public:
bool mark;//自定义标志位,默认false
int point[2];//按钮在画面中的位置【左上角】
int Width;
int Height;
TCHAR text[20];//按钮文字
int font_size;//文字大小
int dx;int dy;//文字相对于按钮的位置
int textRGB[3];//文字颜色
int bgRGB[3];//按钮背景颜色
int ID;//按钮ID,自动设置,不要修改
bool active;//激活按钮事件,设置响应事件后需要开启【暂时没用】
void Create(int w,int h, int loc_x, int loc_y);//创建按钮,注册点击事件
void Draw(void);//重绘按钮
void CreateTask(bool leftClick, bool (*efun)(Button *e));//注册任务
bool (*Click)(Button *e);//按钮点击事件
Button();//构造函数
~Button();//析构函数
};
#endif
//头文件:workstream.h
#ifndef _H_WORKLIFE
#define _H_WORKLIFE
void startWork(void);//开启工作流
void initWork(void);//初始化工作流
int addKeyListener(char e, bool efun());
int addMouseListener(int up,int down,int left, int right, Button *e, bool isLeft);
bool DelWkNode(int _id);
/*******************************************************
* 监听事件队列【无头结点】
* 注册鼠标点击事件时必须传入一个Button实例
*******************************************************/
typedef struct listen{
unsigned int _task_id;
//监听对象只有两个,一个是鼠标,一个是键盘
bool isMouse;
//鼠标事件响应条件
int up;
int right;
int down;
int left;
bool isMouseLeft;
//bool MouseHover;//还没想好。。。
//键盘事件响应条件
char key;
//响应事件
bool (*KeyFun)();//键盘事件
//bool (*MouseHoverFun)();//悬浮事件
Button *btn;
listen *next;
}Listen, *listenList;
#endif
实现
//initEasyX.cpp
#include <graphics.h>
#include "UI_set.h"
#include <math.h>
/* 画布初始化 */
void InitEasyx()
{
initgraph(WIDTH, HEIGHT);//新建画布
setbkcolor