button.h
#include <functional>
#include <iostream>
using namespace std;
// 定义Button类,表示一个按钮
class Button
{
public:
Button(int x, int y, int width, int height, const string& text, const function<void()>& onClick)
: x(x), y(y), width(width), height(height), text(text), onClick(onClick), scale(1.0f), isMouseOver(false), isClicked(false)
{
}
enum class State
{
Active,
Passive,
Selected
};
bool checkMouseOver(int mouseX, int mouseY);
bool checkClick(int mouseX, int mouseY);
void display() const;
void draw();
void settextcolor();
void setTextSize();
private:
int x; // 按钮左上角x坐标
int y; // 按钮左上角y坐标
int width; // 按钮宽度
int height; // 按钮高度
float scale; // 缩放比例,用于实现鼠标悬停效果
bool isMouseOver; // 表示鼠标是否在按钮上方
bool isClicked; // 表示是否点击按钮
string text; // 按钮文本
function<void()> onClick; // 点击按钮触发的函数
};
button.cpp
#include<button.h>
#include <iostream>
// 检查鼠标是否在按钮上方
bool checkMouseOver(int mouseX, int mouseY)
{
isMouseOver = (mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height);
if (isMouseOver) {
scale = 0.9f; // 鼠标悬停时缩放按钮
}
else {
scale = 1.0f; // 恢复按钮原始大小
}
return isMouseOver;
}
// 检查鼠标点击是否在按钮内,并执行函数
bool checkClick(int mouseX, int mouseY)
{
if (mouseX >= x && mouseX <= x + width && mouseY >= y && mouseY <= y + height)
{
onClick(); // 执行按钮点击时的函数
isMouseOver = false;//事件已经处理完毕,不再处于按钮上方或鼠标悬停状
scale = 1.0f;
return true;
}
return false;
}
State getState() const;
void setState(State f_state);
//显示按钮位置
void display() const {
cout << "Button at (" << x << ", " << y << ") with label: "<< endl;
}
// 绘制按钮
void draw()
{
int scaledWidth = width * scale; // 缩放后的按钮宽度
int scaledHeight = height * scale; // 缩放后的按钮高度
int scaledX = x + (width - scaledWidth) / 2; // 缩放后的按钮x坐标
int scaledY = y + (height - scaledHeight) / 2; // 缩放后的按钮y坐标
if (isMouseOver)
{
// 鼠标悬停时按钮边框颜色
// 鼠标悬停时按钮填充颜色
}
else
{
// 按钮边框颜色
// 按钮填充颜色
}
//居中显示按钮文本
}
// 设置文本颜色为黑色
void settextcolor()
{
}
//设置字体大小
void setTextSize()
{
}