initial commit
This commit is contained in:
147
include/StellarX/Button.h
Normal file
147
include/StellarX/Button.h
Normal file
@@ -0,0 +1,147 @@
|
||||
/*******************************************************************************
|
||||
* @文件: Button.h
|
||||
* @摘要: 按钮控件类
|
||||
* @描述:
|
||||
* 提供多种样式和行为的按钮控件,支持点击、悬停、切换等状态。
|
||||
* 继承自Control基类,是框架的核心交互组件之一。
|
||||
*
|
||||
* @所属框架: 星垣(StellarX) GUI框架
|
||||
* @作者: 我在人间做废物
|
||||
* @日期: September 2025
|
||||
******************************************************************************/
|
||||
#pragma once
|
||||
#include "Control.h"
|
||||
|
||||
class button : public Control
|
||||
{
|
||||
|
||||
std::string text; // 按钮上的文字
|
||||
bool click; // 是否被点击
|
||||
bool hover; // 是否被悬停
|
||||
bool dirty = true; // 是否重绘
|
||||
|
||||
COLORREF buttonTrueColor; // 按钮被点击后的颜色
|
||||
COLORREF buttonFalseColor; // 按钮未被点击的颜色
|
||||
COLORREF buttonHoverColor; // 按钮被鼠标悬停的颜色
|
||||
COLORREF buttonBorderColor = RGB(0,0,0);// 按钮边框颜色
|
||||
|
||||
StellarX::buttonMode mode; // 按钮模式
|
||||
StellarX::controlShape shape; // 按钮形状
|
||||
|
||||
int buttonFillMode = BS_SOLID; //按钮填充模式
|
||||
StellarX::fillStyle buttonFillIma = StellarX::fillStyle::BDiagonal; //按钮填充图案
|
||||
IMAGE* buttonFileIMAGE = nullptr; //按钮填充图像
|
||||
|
||||
int ROUND_RECTANGLEwidth = 20; //构成圆角矩形的圆角的椭圆的宽度。
|
||||
int ROUND_RECTANGLEheight = 20; //构成圆角矩形的圆角的椭圆的高度。
|
||||
|
||||
std::function<void()> onClickCallback; //回调函数
|
||||
std::function<void()> onToggleOnCallback; //TOGGLE模式下的回调函数
|
||||
std::function<void()> onToggleOffCallback; //TOGGLE模式下的回调函数
|
||||
|
||||
StellarX::controlText oldStyle = textStyle; // 按钮文字样式
|
||||
int oldtext_width = -1;
|
||||
int oldtext_height = -1;
|
||||
int text_width = 0;
|
||||
int text_height = 0;
|
||||
public:
|
||||
StellarX::controlText textStyle; // 按钮文字样式
|
||||
|
||||
public:
|
||||
/*************************************************************************/
|
||||
/********************************构造函数*********************************/
|
||||
/*************************************************************************/
|
||||
|
||||
//默认按钮颜色
|
||||
button(int x, int y, int width, int height, const std::string text,
|
||||
StellarX::buttonMode mode = StellarX::buttonMode::NORMAL, StellarX::controlShape shape = StellarX::controlShape::RECTANGLE);
|
||||
//自定义按钮未被点击和被点击颜色
|
||||
button(int x, int y, int width, int height, const std::string text,
|
||||
COLORREF ct, COLORREF cf, StellarX::buttonMode mode = StellarX::buttonMode::NORMAL,
|
||||
StellarX::controlShape shape = StellarX::controlShape::RECTANGLE);
|
||||
//自定义按钮颜色和悬停颜色
|
||||
button(int x, int y, int width, int height, const std::string text,
|
||||
COLORREF ct, COLORREF cf,COLORREF ch,
|
||||
StellarX::buttonMode mode = StellarX::buttonMode::NORMAL, StellarX::controlShape shape = StellarX::controlShape::RECTANGLE);
|
||||
//析构函数 释放图形指针内存
|
||||
~button();
|
||||
|
||||
/*************************************************************************/
|
||||
/********************************Set方法**********************************/
|
||||
/*************************************************************************/
|
||||
//绘制按钮
|
||||
void draw() override;
|
||||
//按钮事件处理
|
||||
|
||||
void handleEvent(const ExMessage& msg) override;
|
||||
|
||||
//设置回调函数
|
||||
//************************************
|
||||
// 名称: setOnClickListener | setOnToggleOnListener | setOnToggleOffListener
|
||||
// 全名: button::setOnClickListener
|
||||
// 访问: public
|
||||
// 返回类型: void
|
||||
// Parameter: const std::function<> & & callback 设置回调函数 传入回调函数名即可,不需要传入(),不需要传入参数,不需要传入返回值
|
||||
// 如果要传入参数,可以使用lambda表达式
|
||||
//************************************
|
||||
void setOnClickListener(const std::function<void()>&& callback);
|
||||
//设置TOGGLE模式下被点击的回调函数
|
||||
void setOnToggleOnListener(const std::function<void()>&& callback);
|
||||
//设置TOGGLE模式下取消点击的回调函数
|
||||
void setOnToggleOffListener(const std::function<void()>&& callback);
|
||||
//设置按钮模式
|
||||
void setbuttonMode(StellarX::buttonMode mode);
|
||||
//设置圆角矩形椭圆宽度
|
||||
int setROUND_RECTANGLEwidth(int width);
|
||||
//设置圆角矩形椭圆高度
|
||||
int setROUND_RECTANGLEheight(int height);
|
||||
//设置按钮填充模式
|
||||
void setFillMode(int mode);
|
||||
//设置按钮填充图案
|
||||
void setFillIma(StellarX::fillStyle ima);
|
||||
//设置按钮填充图像
|
||||
void setFillIma(std::string imaName);
|
||||
//设置按钮边框颜色
|
||||
void setbuttonBorder(COLORREF Border);
|
||||
//设置按钮文本
|
||||
void setbuttonText(const char* text);
|
||||
void setbuttonText(std::string text);
|
||||
//设置按钮形状
|
||||
void setbuttonShape(StellarX::controlShape shape);
|
||||
|
||||
//判断按钮是否被点击
|
||||
bool isClicked() const;
|
||||
|
||||
/*************************************************************************/
|
||||
/********************************Get方法**********************************/
|
||||
/*************************************************************************/
|
||||
|
||||
//获取按钮文字
|
||||
std::string getbuttonText() const;
|
||||
const char* getbuttonText_c() const;
|
||||
//获取按钮模式
|
||||
StellarX::buttonMode getbuttonMode() const;
|
||||
//获取按钮形状
|
||||
StellarX::controlShape getbuttonShape() const;
|
||||
//获取按钮填充模式
|
||||
int getFillMode() const;
|
||||
//获取按钮填充图案
|
||||
StellarX::fillStyle getFillIma() const;
|
||||
//获取按钮填充图像
|
||||
IMAGE* getFillImaImage() const;
|
||||
//获取按钮边框颜色
|
||||
COLORREF getbuttonBorder() const;
|
||||
//获取按钮文字颜色
|
||||
COLORREF getbuttonTxtColor() const;
|
||||
//获取按钮文字样式
|
||||
StellarX::controlText getbuttonTextStyle() const;
|
||||
|
||||
private:
|
||||
//初始化按钮
|
||||
void initButton(const std::string text, StellarX::buttonMode mode, StellarX::controlShape shape, COLORREF ct, COLORREF cf, COLORREF ch);
|
||||
//判断鼠标是否在圆形按钮内
|
||||
bool isMouseInCircle(int mouseX, int mouseY, int x, int y, int radius);
|
||||
//判断鼠标是否在椭圆按钮内
|
||||
bool isMouseInEllipse(int mouseX, int mouseY, int x, int y, int width, int height);
|
||||
};
|
||||
|
||||
46
include/StellarX/Canvas.h
Normal file
46
include/StellarX/Canvas.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
#include "Control.h"
|
||||
// 画布容器控件,可以作为其他控件的父容器
|
||||
// 功能:
|
||||
// - 包含和管理子控件
|
||||
// - 将事件传递给子控件
|
||||
// - 提供统一的背景和边框
|
||||
// 使用场景: 用于分组相关控件或实现复杂布局
|
||||
class Canvas : public Control
|
||||
{
|
||||
private:
|
||||
std::vector<std::unique_ptr<Control>> controls;
|
||||
|
||||
StellarX::controlShape shape = StellarX::controlShape::RECTANGLE; //容器形状
|
||||
|
||||
StellarX::fillMode canvasFillMode = StellarX::fillMode::Solid; //容器填充模式
|
||||
StellarX::lineStyle canvasLineStyle = StellarX::lineStyle::Solid; //线型
|
||||
int canvaslinewidth = 1; //线宽
|
||||
|
||||
COLORREF canvasBorderClor = RGB(0, 0, 0);//边框颜色
|
||||
COLORREF canvasBkClor = RGB(255,255,255); //背景颜色
|
||||
|
||||
public:
|
||||
Canvas(int x, int y, int width, int height);
|
||||
~Canvas() {}
|
||||
//绘制容器及其子控件
|
||||
void draw() override;
|
||||
void handleEvent(const ExMessage& msg) override;
|
||||
//添加控件
|
||||
void addControl(std::unique_ptr<Control> control);
|
||||
|
||||
//设置容器样式
|
||||
void setShape(StellarX::controlShape shape);
|
||||
//设置容器填充模式
|
||||
void setcanvasfillMode(StellarX::fillMode mode);
|
||||
//设置容器边框颜色
|
||||
void setBorderColor(COLORREF color);
|
||||
//设置填充颜色
|
||||
void setCanvasBkColor(COLORREF color);
|
||||
//设置线形
|
||||
void setcanvasLineStyle(StellarX::lineStyle style);
|
||||
//设置线段宽度
|
||||
void setlinewidth(int width);
|
||||
|
||||
};
|
||||
|
||||
80
include/StellarX/Control.h
Normal file
80
include/StellarX/Control.h
Normal file
@@ -0,0 +1,80 @@
|
||||
#pragma once
|
||||
/*********************************************************************
|
||||
* \文件: Control.h
|
||||
* \描述: 控件基类,所有控件都继承自此类。
|
||||
* 提供了控件的一些基本属性和方法。
|
||||
*
|
||||
* \作者: 我在人间做废物
|
||||
* \日期: September 2025
|
||||
*********************************************************************/
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <easyx.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <functional>
|
||||
#include <initializer_list>
|
||||
#include "CoreTypes.h"
|
||||
/**
|
||||
* @类名称: Control
|
||||
* @功能描述: 控件基类,所有控件都继承自此类。
|
||||
* 提供了控件的一些基本属性和方法。
|
||||
*
|
||||
* @成员说明:
|
||||
* int x, y, width, height; // 控件的基本属性
|
||||
*
|
||||
* LOGFONT currentFont; //保存当前字体样式和颜色
|
||||
* COLORREF currentColor = 0;
|
||||
* COLORREF currentBkColor = 0; //保存当前填充色
|
||||
* COLORREF currentBorderColor = 0;//边框颜色
|
||||
* LINESTYLE* currentLineStyle = new LINESTYLE; //保存当前线型
|
||||
*
|
||||
* Control():x(0), y(0), width(0), height(0) {}
|
||||
* Control(int x, int y, int width, int height) :x(x),y(y),width(width),height(height){}
|
||||
* virtual void draw() = 0; // 绘制控件
|
||||
* virtual void handleEvent(const ExMessage& msg) = 0; // 处理事件
|
||||
* virtual ~Control() { delete currentLineStyle; }
|
||||
*
|
||||
* //保存当前字体样式和颜色
|
||||
* void saveStyle();
|
||||
* //恢复默认字体样式和颜色
|
||||
* void restoreStyle();
|
||||
*
|
||||
* @使用示例:
|
||||
* Control* ctrl = new Button(10, 10, 100, 50, "Click Me");
|
||||
* ctrl->draw();
|
||||
* delete ctrl;
|
||||
*
|
||||
* @备注:
|
||||
* 这是一个抽象基类,不能直接实例化。
|
||||
* 所有具体的控件类都必须实现draw和handleEvent方法。
|
||||
*/
|
||||
class Control
|
||||
{
|
||||
protected:
|
||||
int x, y, width, height; // 控件的基本属性
|
||||
|
||||
LOGFONT currentFont; //保存当前字体样式和颜色
|
||||
COLORREF currentColor = 0;
|
||||
COLORREF currentBkColor = 0; //保存当前填充色
|
||||
COLORREF currentBorderColor = 0;//边框颜色
|
||||
LINESTYLE* currentLineStyle = new LINESTYLE; //保存当前线型
|
||||
public:
|
||||
Control(const Control&) = delete; // 禁用拷贝构造
|
||||
Control& operator=(const Control&) = delete; // 禁用拷贝赋值
|
||||
Control(Control&&) = default; // 允许移动构造
|
||||
Control& operator=(Control&&) = default; // 允许移动赋值
|
||||
Control():x(0), y(0), width(100), height(100) {}
|
||||
Control(int x, int y, int width, int height) :x(x),y(y),width(x + width),height(y + height){}
|
||||
|
||||
virtual void draw() = 0; // 绘制控件
|
||||
virtual void handleEvent(const ExMessage& msg) = 0; // 处理事件
|
||||
virtual ~Control() {
|
||||
delete currentLineStyle; currentLineStyle = nullptr; }
|
||||
|
||||
protected:
|
||||
//保存当前样式和颜色
|
||||
void saveStyle();
|
||||
//恢复默认样式和颜色
|
||||
void restoreStyle();
|
||||
};
|
||||
243
include/StellarX/CoreTypes.h
Normal file
243
include/StellarX/CoreTypes.h
Normal file
@@ -0,0 +1,243 @@
|
||||
#pragma once
|
||||
/*******************************************************************************
|
||||
* @文件: CoreTypes.h
|
||||
* @摘要: 星垣框架核心类型定义文件
|
||||
* @描述:
|
||||
* 集中定义框架中使用的所有枚举类型和结构体,确保类型一致性。
|
||||
* 这是框架的类型系统基础,所有控件都依赖于此文件中定义的类型。
|
||||
*
|
||||
* @作者: 我在人间做废物
|
||||
* @日期: September 2025
|
||||
******************************************************************************/
|
||||
#include"easyX.h"
|
||||
namespace StellarX
|
||||
{
|
||||
/**
|
||||
* @枚举类名称: hatchStyle
|
||||
* @功能描述: 用来定义控件填充图案的枚举类
|
||||
*
|
||||
* @详细说明:
|
||||
* 根据此枚举类可以自定义控件填充图案
|
||||
* 可以在控件初始化时设置填充图案
|
||||
* 根据具体情况选择不同的填充图案
|
||||
* 默认填充图案为水平线
|
||||
*
|
||||
* @取值说明:
|
||||
* Horizontal - 水平线
|
||||
* Vertical - 垂直线
|
||||
* FDiagonal - 反斜线
|
||||
* BDiagonal - 正斜线
|
||||
* Cross - 十字
|
||||
* DiagCross - 网格
|
||||
*
|
||||
* @使用示例:
|
||||
* // 示例代码展示如何使用此枚举类
|
||||
* hatchStyle var = hatchStyle::Horizontal;
|
||||
*
|
||||
* @备注:
|
||||
* 此枚举类仅支持图案填充模式
|
||||
* 枚举类在使用时,需要使用::进行调用,还要注意大小写
|
||||
*/
|
||||
enum class fillStyle {
|
||||
Horizontal = HS_HORIZONTAL, // 水平线
|
||||
Vertical = HS_VERTICAL, // 垂直线
|
||||
FDiagonal = HS_FDIAGONAL, // 反斜线
|
||||
BDiagonal = HS_BDIAGONAL, // 正斜线
|
||||
Cross = HS_CROSS, // 十字
|
||||
DiagCross = HS_DIAGCROSS // 网格
|
||||
};
|
||||
/**
|
||||
* @枚举类名称: fillMode
|
||||
* @功能描述: 用来定义控件填充模式的枚举类
|
||||
*
|
||||
* @详细说明:
|
||||
* 根据此枚举类可以自定义控件填充模式
|
||||
* 可以在控件初始化时设置填充模式
|
||||
* 根据具体情况选择不同的填充模式
|
||||
* 默认填充模式为固实填充
|
||||
*
|
||||
* @取值说明:
|
||||
* Solid - 固实填充
|
||||
* Null - 不填充
|
||||
* Hatched - 图案填充
|
||||
* Pattern - 自定义图案填充
|
||||
* DibPattern - 自定义图像填充
|
||||
*
|
||||
* @使用示例:
|
||||
* // 示例代码展示如何使用此枚举类
|
||||
* fillMode var = fillMode::Solid;
|
||||
*
|
||||
* @备注:
|
||||
* 枚举类在使用时,需要使用::进行调用,还要注意大小写
|
||||
*/
|
||||
enum class fillMode
|
||||
{
|
||||
Solid = BS_SOLID, //固实填充
|
||||
Null = BS_NULL, // 不填充
|
||||
Hatched = BS_HATCHED, // 图案填充
|
||||
Pattern = BS_PATTERN, // 自定义图案填充
|
||||
DibPattern = BS_DIBPATTERN // 自定义图像填充
|
||||
};
|
||||
/**
|
||||
* @枚举类名称: linStyle
|
||||
* @功能描述: 此枚举类用来定义控件边框线型
|
||||
*
|
||||
* @详细说明:
|
||||
* 根据此枚举类可以自定义控件边框线型
|
||||
* 可以在控件初始化时设置边框线型
|
||||
* 根据具体情况选择不同的线型
|
||||
* 默认线型为实线
|
||||
*
|
||||
* @取值说明:
|
||||
* Solid // 实线
|
||||
* Dash // 虚线
|
||||
* Dot // 点线
|
||||
* DashDot // 点划线
|
||||
* DashDotDot // 双点划线
|
||||
* Null // 无线
|
||||
*
|
||||
* @使用示例:
|
||||
* // 示例代码展示如何使用此枚举类
|
||||
* lineStyle var = lineStyle::Solid;
|
||||
*
|
||||
* @备注:
|
||||
* 枚举类在使用时,需要使用::进行调用,还要注意大小写
|
||||
*/
|
||||
enum class lineStyle {
|
||||
Solid = PS_SOLID, // 实线
|
||||
Dash = PS_DASH, // 虚线
|
||||
Dot = PS_DOT, // 点线
|
||||
DashDot = PS_DASHDOT, // 点划线
|
||||
DashDotDot = PS_DASHDOTDOT, // 双点划线
|
||||
Null = PS_NULL // 无线
|
||||
};
|
||||
|
||||
/**
|
||||
* @结构体名称: controlText
|
||||
* @功能描述: 控件字体样式 可以自定义不同的样式
|
||||
*
|
||||
* @详细说明:
|
||||
* 主要使用的场景为:需要修改或想自定义控件字体大小,字体样式,颜色等
|
||||
*
|
||||
* @成员说明:
|
||||
* int nHeight = 0; - 字体高度
|
||||
* int nWidth = 0; - 字体宽度 如果为0则自适应
|
||||
* LPCTSTR lpszFace = "宋体"; - 字体名称
|
||||
* COLORREF color = RGB(0, 0, 0); - 字体颜色
|
||||
* int nEscapement = 0; - 字符串旋转角度
|
||||
* int nOrientation = 0; - 字符旋转角度
|
||||
* int nWeight = 0; - 字体粗细 范围0~1000 0表示默认
|
||||
* bool bItalic = false; - 是否斜体
|
||||
* bool bUnderline = false; - 是否下划线
|
||||
* bool bStrikeOut = false; - 是否删除线
|
||||
|
||||
* bool operator!=(const controlText& text);
|
||||
* controlText& operator=(const controlText& text
|
||||
*/
|
||||
struct controlText
|
||||
{
|
||||
int nHeight = 0; //- 字体高度
|
||||
int nWidth = 0; //- 字体宽度 如果为0则自适应
|
||||
LPCTSTR lpszFace = "宋体"; //- 字体名称
|
||||
COLORREF color = RGB(0, 0, 0); //- 字体颜色
|
||||
int nEscapement = 0; //- 字符串旋转角度
|
||||
int nOrientation = 0; //- 字符旋转角度
|
||||
int nWeight = 0; //- 字体粗细 范围0~1000 0表示默认
|
||||
bool bItalic = false; //- 是否斜体
|
||||
bool bUnderline = false; //- 是否下划线
|
||||
bool bStrikeOut = false; //- 是否删除线
|
||||
|
||||
bool operator!=(const controlText& text);
|
||||
controlText& operator=(const controlText& text);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* @枚举名称: controlShape
|
||||
* @功能描述: 枚举控件的不同几何样式
|
||||
*
|
||||
* @详细说明:
|
||||
* 定义了四种(有无边框算一种)不同的几何样式,可以根据具体需求
|
||||
* 自定义控件的形状。
|
||||
*
|
||||
* @取值说明:
|
||||
* RECTANGLE = 1, //有边框矩形
|
||||
* B_RECTANGLE, //无边框矩形
|
||||
|
||||
* ROUND_RECTANGLE, //有边框圆角矩形
|
||||
* B_ROUND_RECTANGLE, //无边框圆角矩形
|
||||
|
||||
* CIRCLE, //有边框圆形
|
||||
* B_CIRCLE, //无边框圆形
|
||||
|
||||
* ELLIPSE, //有边框椭圆
|
||||
* B_ELLIPSE //无边框椭圆
|
||||
*
|
||||
* @使用示例:
|
||||
* controlShape shape = ELLIPSE;
|
||||
*
|
||||
* @备注:
|
||||
* 按钮类支持所有形状,部分控件只支持部分形状,具体请参考控件类。
|
||||
*/
|
||||
enum class controlShape
|
||||
{
|
||||
RECTANGLE = 1, //有边框矩形
|
||||
B_RECTANGLE, //无边框矩形
|
||||
|
||||
ROUND_RECTANGLE, //有边框圆角矩形
|
||||
B_ROUND_RECTANGLE, //无边框圆角矩形
|
||||
|
||||
CIRCLE, //有边框圆形
|
||||
B_CIRCLE, //无边框圆形
|
||||
|
||||
ELLIPSE, //有边框椭圆
|
||||
B_ELLIPSE //无边框椭圆
|
||||
};
|
||||
/**
|
||||
* @枚举类名称: textBoxmode
|
||||
* @功能描述: 定义了文本框的两种模式
|
||||
*
|
||||
* @详细说明:
|
||||
* 需要限制文本框是否接受用户输入时使用
|
||||
*
|
||||
* @取值说明:
|
||||
* INPUT_MODE, // 用户可输入模式
|
||||
* READONLY_MODE // 只读模式
|
||||
*
|
||||
* @使用示例:
|
||||
* // 示例代码展示如何使用此枚举类
|
||||
* StellarX::textBoxmode var = EnumClassName::VALUE1;
|
||||
*
|
||||
* @备注:
|
||||
* 枚举类的特性、与普通枚举的区别
|
||||
*/
|
||||
enum class textBoxmode
|
||||
{
|
||||
INPUT_MODE, // 用户可输入模式
|
||||
READONLY_MODE // 只读模式
|
||||
};
|
||||
|
||||
/**
|
||||
* @枚举名称: buttonMode
|
||||
* @功能描述: brief
|
||||
*
|
||||
* @详细说明:
|
||||
* 根据按钮的工作模式,按钮可以有不同的行为。
|
||||
* 用户可以在具体情况下设置按钮的工作模式。
|
||||
*
|
||||
* @取值说明:
|
||||
* NORMAL = 1, - 普通模式,点击后触发回调,但不会保持状态。
|
||||
* TOGGLE, - 切换模式,点击后会在选中和未选中之间切换,触发不同的回调函数。
|
||||
* DISABLED - 禁用模式,按钮不可点击,显示为灰色,文本显示删除线。
|
||||
*
|
||||
* @使用示例:
|
||||
* button b1(100, 100, 120, 120, "测试按钮", RGB(128, 0, 0), RGB(255, 9, 9));
|
||||
*
|
||||
*/
|
||||
enum class buttonMode
|
||||
{
|
||||
NORMAL = 1,
|
||||
TOGGLE,
|
||||
DISABLED
|
||||
};
|
||||
};
|
||||
37
include/StellarX/StellarX.h
Normal file
37
include/StellarX/StellarX.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*******************************************************************************
|
||||
* @文件: StellarX.h
|
||||
* @摘要: 星垣(StellarX) GUI框架 - 主包含头文件
|
||||
* @版本: v1.0.0
|
||||
* @描述:
|
||||
* 一个为Windows平台打造的轻量级、模块化C++ GUI框架。
|
||||
* 基于EasyX图形库,提供简洁易用的API和丰富的控件。
|
||||
*
|
||||
* 通过包含此单一头文件,即可使用框架的所有功能。
|
||||
* 内部包含顺序经过精心设计,确保所有依赖关系正确解析。
|
||||
*
|
||||
* @作者: 我在人间做废物
|
||||
* @邮箱: [您的邮箱或联系方式]
|
||||
* @仓库: https://github.com/yourusername/stellarx
|
||||
*
|
||||
* @许可证: MIT License
|
||||
* @版权: Copyright (c) 2025 我在人间做废物
|
||||
*
|
||||
* @使用说明:
|
||||
* 只需包含此文件即可使用框架所有功能。
|
||||
* 示例: #include "StellarX.h"
|
||||
* @包含顺序:
|
||||
* 1. CoreTypes.h - 基础类型定义
|
||||
* 2. Control.h - 控件基类
|
||||
* 3. 其他具体控件头文件
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreTypes.h"
|
||||
#include "Control.h"
|
||||
#include"Button.h"
|
||||
#include"window.h"
|
||||
#include"label.h"
|
||||
#include"textBox.h"
|
||||
#include"Canvas.h"
|
||||
#include"table.h"
|
||||
35
include/StellarX/label.h
Normal file
35
include/StellarX/label.h
Normal file
@@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
#include "Control.h"
|
||||
// 标签控件,用于显示文本
|
||||
// 特点:
|
||||
// - 支持背景透明/不透明模式
|
||||
// - 不支持用户交互(无事件处理)
|
||||
// - 自动适应文本内容大小
|
||||
|
||||
class label : public Control
|
||||
{
|
||||
std::string text; //标签文本
|
||||
COLORREF textColor; //标签文本颜色
|
||||
COLORREF textBkColor; //标签背景颜色
|
||||
bool textBkDisap = false; //标签背景是否透明
|
||||
|
||||
//标签事件处理(标签无事件)不实现具体代码
|
||||
void handleEvent(const ExMessage& msg) override {}
|
||||
public:
|
||||
StellarX::controlText textStyle; //标签文本样式
|
||||
public:
|
||||
label();
|
||||
label(int x, int y, std::string text = "标签",COLORREF textcolor = BLACK, COLORREF bkColor= RGB(255,255,255));
|
||||
//绘标签
|
||||
void draw() override;
|
||||
//设置标签背景是否透明
|
||||
void setTxtdisap(bool key);
|
||||
//设置标签文本颜色
|
||||
void setTxtColor(COLORREF color);
|
||||
//设置标签背景颜色
|
||||
void setTxtBkColor(COLORREF color);
|
||||
//设置标签文本
|
||||
void setText(std::string text);
|
||||
|
||||
};
|
||||
|
||||
131
include/StellarX/table.h
Normal file
131
include/StellarX/table.h
Normal file
@@ -0,0 +1,131 @@
|
||||
/*******************************************************************************
|
||||
* @文件: table.h
|
||||
* @摘要: 高级表格控件,支持分页显示
|
||||
* @描述:
|
||||
* 提供完整的数据表格功能,包括表头、数据行、分页和导航按钮。
|
||||
* 自动计算列宽和行高,支持自定义样式
|
||||
*
|
||||
* @实现机制:
|
||||
* 1. 使用二维向量存储数据
|
||||
* 2. 通过分页算法计算显示范围
|
||||
* 3. 使用内部按钮和标签实现分页UI
|
||||
* 4. 通过背景缓存优化渲染性能
|
||||
*
|
||||
* @所属框架: 星垣(StellarX) GUI框架
|
||||
* @作者: 我在人间做废物
|
||||
* @日期: September 2025
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
#include "Control.h"
|
||||
#include "Button.h"
|
||||
#include "label.h"
|
||||
|
||||
class table :public Control
|
||||
{
|
||||
private:
|
||||
std::vector<std::vector<std::string>> data; // 表格数据
|
||||
std::vector<std::string> headers; // 表格表头
|
||||
std::string pageNumtext = "页码标签"; // 页码标签文本
|
||||
|
||||
int tableBorderWidth = 1; // 边框宽度
|
||||
|
||||
std::vector<int> colWidths; // 每列的宽度
|
||||
std::vector<int> lineHeights; // 每行的高度
|
||||
|
||||
IMAGE* saveBkImage = nullptr;
|
||||
|
||||
int rowsPerPage = 5; // 每页显示的行数
|
||||
int currentPage = 1; // 当前页码
|
||||
int totalPages = 1; // 总页数
|
||||
|
||||
bool isShowPageButton = true; // 是否显示翻页按钮
|
||||
bool dirty = true; // 是否需要重绘
|
||||
bool isNeedDrawHeaders = true; // 是否需要绘制表头
|
||||
bool isNeedCellSize = true; // 是否需要计算单元格尺寸
|
||||
|
||||
button* prevButton = nullptr; // 上一页按钮
|
||||
button* nextButton = nullptr; // 下一页按钮
|
||||
label* pageNum = nullptr; //页码文本
|
||||
|
||||
int dX = x, dY = y; // 单元格的开始坐标
|
||||
int uX = x, uY = y; // 单元格的结束坐标
|
||||
|
||||
int pX = 0; //标签左上角坐标
|
||||
int pY = 0; //标签左上角坐标
|
||||
|
||||
StellarX::fillMode tableFillMode = StellarX::fillMode::Solid; //填充模式
|
||||
StellarX::lineStyle tableLineStyle = StellarX::lineStyle::Solid; // 线型
|
||||
COLORREF tableBorderClor = RGB(0, 0, 0); // 表格边框颜色
|
||||
COLORREF tableBkClor = RGB(255, 255, 255); // 表格背景颜色
|
||||
|
||||
void initTextWaH(); //初始化文本像素宽度和高度
|
||||
void initButton(); //初始化翻页按钮
|
||||
void initPageNum(); //初始化页码标签
|
||||
|
||||
void drawTable(); //绘制当前页
|
||||
void drawHeader(); //绘制表头
|
||||
void drawPageNum(); //绘制页码信息
|
||||
void drawButton(); //绘制翻页按钮
|
||||
public:
|
||||
StellarX::controlText textStyle; // 文本样式
|
||||
|
||||
public:
|
||||
table(int x, int y);
|
||||
~table();
|
||||
|
||||
// 绘制表格
|
||||
void draw() override;
|
||||
//事件处理
|
||||
void handleEvent(const ExMessage& msg) override;
|
||||
|
||||
//************************** 设置属性 *****************************/
|
||||
|
||||
//设置表头
|
||||
void setHeaders(std::initializer_list<std::string> headers);
|
||||
//设置表格数据
|
||||
void setData(const std::vector<std::string>& data);
|
||||
void setData(const std::initializer_list<std::vector<std::string>>& data);
|
||||
//设置每页显示的行数
|
||||
void setRowsPerPage(int rows);
|
||||
//设置是否显示翻页按钮
|
||||
void showPageButton(bool isShow);
|
||||
//设置表格边框颜色
|
||||
void settableBorder(COLORREF color);
|
||||
//设置表格背景颜色
|
||||
void settableBk(COLORREF color);
|
||||
//设置填充模式
|
||||
void settableFillMode(StellarX::fillMode mode);
|
||||
//设置线型
|
||||
void settableLineStyle(StellarX::lineStyle style);
|
||||
//设置边框宽度
|
||||
void settableBorderWidth(int width);
|
||||
|
||||
//************************** 获取属性 *****************************/
|
||||
|
||||
//获取当前页码
|
||||
int getCurrentPage() const;
|
||||
//获取总页数
|
||||
int getTotalPages() const;
|
||||
//获取每页显示的行数
|
||||
int getRowsPerPage() const;
|
||||
//获取是否显示翻页按钮
|
||||
bool getShowPageButton() const;
|
||||
//获取表格边框颜色
|
||||
COLORREF gettableBorder() const;
|
||||
//获取表格背景颜色
|
||||
COLORREF gettableBk() const;
|
||||
//获取填充模式
|
||||
StellarX::fillMode gettableFillMode() const;
|
||||
//获取线型
|
||||
StellarX::lineStyle gettableLineStyle() const;
|
||||
//获取表头
|
||||
std::vector<std::string> getHeaders () const;
|
||||
//获取表格数据
|
||||
std::vector<std::vector<std::string>> getData() const;
|
||||
//获取表格边框宽度
|
||||
int gettableBorderWidth() const;
|
||||
|
||||
|
||||
};
|
||||
|
||||
43
include/StellarX/textBox.h
Normal file
43
include/StellarX/textBox.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
#include "Control.h"
|
||||
|
||||
// 文本框控件,支持输入和只读两种模式
|
||||
// 特殊说明:
|
||||
// - 在INPUT_MODE下点击会调用EasyX的InputBox
|
||||
// - 在READONLY_MODE下点击会显示信息对话框
|
||||
// - 最大字符长度受maxCharLen限制
|
||||
class textBox : public Control
|
||||
{
|
||||
std::string text; //文本
|
||||
StellarX::textBoxmode mode; //模式
|
||||
StellarX::controlShape shape; //形状
|
||||
bool dirty = true; //是否重绘
|
||||
bool click = false; //是否点击
|
||||
int maxCharLen = 10;//最大字符长度
|
||||
COLORREF textBoxBkClor = RGB(255, 255, 255); //背景颜色
|
||||
COLORREF textBoxBorderClor = RGB(0,0,0); //边框颜色
|
||||
|
||||
public:
|
||||
StellarX::controlText textStyle; //文本样式
|
||||
|
||||
textBox(int x, int y, int width, int height, std::string text = "", StellarX::textBoxmode mode = StellarX::textBoxmode::INPUT_MODE, StellarX::controlShape shape = StellarX::controlShape::RECTANGLE);
|
||||
void draw() override;
|
||||
void handleEvent(const ExMessage& msg) override;
|
||||
//设置模式
|
||||
|
||||
void setMode(StellarX::textBoxmode mode);
|
||||
//设置可输入最大字符长度
|
||||
void setmaxCharLen(int len);
|
||||
//设置形状
|
||||
void settextBoxshape(StellarX::controlShape shape);
|
||||
//设置边框颜色
|
||||
void settextBoxBorder(COLORREF color);
|
||||
//设置背景颜色
|
||||
void settextBoxBk(COLORREF color);
|
||||
|
||||
//获取文本
|
||||
std::string gettext();
|
||||
|
||||
};
|
||||
|
||||
|
||||
53
include/StellarX/window.h
Normal file
53
include/StellarX/window.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
#include "Control.h"
|
||||
//窗口模式
|
||||
//#define EX_DBLCLKS 1 - 在绘图窗口中支持鼠标双击事件。
|
||||
//#define EX_NOCLOSE 2 - 禁用绘图窗口的关闭按钮。
|
||||
//#define EX_NOMINIMIZE 3 - 禁用绘图窗口的最小化按钮。
|
||||
//#define EX_SHOWCONSOLE 4 - 显示控制台窗口。
|
||||
/*******************************************************************************
|
||||
* @类: window
|
||||
* @摘要: 应用程序主窗口类
|
||||
* @描述:
|
||||
* 负责创建和管理应用程序的主窗口,是所有控件的根容器。
|
||||
* 处理消息循环、事件分发和窗口生命周期管理。
|
||||
*
|
||||
* @重要说明:
|
||||
* - 使用 initgraph() 创建窗口
|
||||
* - 使用 BeginBatchDraw()/EndBatchDraw() 实现双缓冲
|
||||
* - 使用 getmessage() 处理消息循环
|
||||
******************************************************************************/
|
||||
class window
|
||||
{
|
||||
int width; //窗口宽度
|
||||
int height; //窗口高度
|
||||
int windowMode = NULL; //窗口模式
|
||||
HWND hWnd = NULL; //窗口句柄
|
||||
std::string headline; //窗口标题
|
||||
COLORREF wBkcolor = BLACK; //窗口背景
|
||||
IMAGE* background = nullptr; //窗口背景图片
|
||||
std::vector<std::unique_ptr<Control>> controls; //控件管理
|
||||
|
||||
public:
|
||||
window(int width, int height, int mode);
|
||||
window(int width, int height, int mode, COLORREF bkcloc);
|
||||
window(int width, int height, int mode , COLORREF bkcloc, std::string headline = "窗口");
|
||||
~window();
|
||||
//绘制窗口
|
||||
void draw();
|
||||
void draw(std::string pImgFile);
|
||||
//事件循环
|
||||
void runEventLoop();
|
||||
//设置窗口背景图片
|
||||
|
||||
void setBkImage(std::string pImgFile);
|
||||
//设置窗口背景颜色
|
||||
void setBkcolor(COLORREF c);
|
||||
//设置窗口标题
|
||||
void setHeadline(std::string headline);
|
||||
//添加控件
|
||||
void addControl(std::unique_ptr<Control> control);
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user