修复了一些BUG,增强了一些功能,详情查看更新日志

This commit is contained in:
2026-03-17 20:13:42 +08:00
parent 348cf666f5
commit c66cad3423
11 changed files with 148 additions and 72 deletions
+16 -15
View File
@@ -22,9 +22,9 @@
#include"label.h"
#define DISABLEDCOLOUR RGB(96, 96, 96) //禁用状态颜色
#define TEXTMARGINS_X 6
#define TEXTMARGINS_X 6
#define TEXTMARGINS_Y 4
constexpr int bordWith = 1; //边框宽度,用于快照恢复时的偏移计算
constexpr int bordWith = 1; //边框宽度,用于快照恢复时的偏移计算
constexpr int bordHeight = 1; //边框高度,用于快照恢复时的偏移计算
class Button : public Control
@@ -39,16 +39,16 @@ class Button : public Control
int padX = TEXTMARGINS_X; // 文本最小左右内边距
int padY = TEXTMARGINS_Y; // 文本最小上下内边距
COLORREF buttonTrueColor; // 按钮被点击后的颜色
COLORREF buttonFalseColor; // 按钮未被点击的颜色
COLORREF buttonHoverColor; // 按钮被鼠标悬停的颜色
COLORREF buttonTrueColor; // 按钮被点击后的颜色
COLORREF buttonFalseColor; // 按钮未被点击的颜色
COLORREF buttonHoverColor; // 按钮被鼠标悬停的颜色
COLORREF buttonBorderColor = RGB(0, 0, 0);// 按钮边框颜色
StellarX::ButtonMode mode; // 按钮模式
StellarX::ButtonMode mode; // 按钮模式
StellarX::ControlShape shape; // 按钮形状
StellarX::FillMode buttonFillMode = StellarX::FillMode::Solid; //按钮填充模式
StellarX::FillStyle buttonFillIma = StellarX::FillStyle::BDiagonal; //按钮填充图案
StellarX::FillMode buttonFillMode = StellarX::FillMode::Solid; //按钮填充模式
StellarX::FillStyle buttonFillIma = StellarX::FillStyle::BDiagonal; //按钮填充图案
IMAGE* buttonFileIMAGE = nullptr; //按钮填充图像
std::function<void()> onClickCallback; //回调函数
@@ -63,20 +63,20 @@ class Button : public Control
// === Tooltip ===
bool tipEnabled = false; // 是否启用
bool tipVisible = false; // 当前是否显示
bool tipVisible = false; // 当前是否显示
bool tipFollowCursor = false; // 是否跟随鼠标
bool tipUserOverride = false; // 是否用户自定义了tip文本
bool tipUserOverride = false; // 是否用户自定义了tip文本
int tipDelayMs = 1000; // 延时(毫秒)
int tipOffsetX = 12; // 相对鼠标偏移
int tipOffsetX = 12; // 相对鼠标偏移
int tipOffsetY = 18;
ULONGLONG tipHoverTick = 0; // 开始悬停的时间戳
int lastMouseX = 0; // 最新鼠标位置(用于定位)
ULONGLONG tipHoverTick = 0; // 开始悬停的时间戳
int lastMouseX = 0; // 最新鼠标位置(用于定位)
int lastMouseY = 0;
std::string tipTextClick; //NORMAL 模式下用
std::string tipTextClick; // NORMAL 模式下用
std::string tipTextOn; // click==true 时用
std::string tipTextOff; // click==false 时用
Label tipLabel; // 直接复用Label作为提示
Label tipLabel; // 直接复用Label作为提示
public:
StellarX::ControlText textStyle; // 按钮文字样式
@@ -178,6 +178,7 @@ private:
bool isMouseInEllipse(int mouseX, int mouseY, int x, int y, int width, int height);
//获取对话框类型
bool model() const override { return false; }
//文本截断
void cutButtonText();
// 统一隐藏&恢复背景
void hideTooltip();
+4 -3
View File
@@ -195,7 +195,7 @@ namespace StellarX
/**
* @枚举类名称: TextBoxmode
* @功能描述: 定义了文本框的种模式
* @功能描述: 定义了文本框的种模式
*
* @详细说明:
* 需要限制文本框是否接受用户输入时使用
@@ -203,12 +203,13 @@ namespace StellarX
* @取值说明:
* INPUT_MODE, // 用户可输入模式
* READONLY_MODE // 只读模式
* PASSWORD_MODE // 密码模式
*/
enum class TextBoxmode
{
INPUT_MODE, // 用户可输入模式
INPUT_MODE, // 用户可输入模式
READONLY_MODE, // 只读模式
PASSWORD_MODE// 密码模式
PASSWORD_MODE // 密码模式
};
/**
+3 -2
View File
@@ -1,7 +1,7 @@
/*******************************************************************************
* @文件: StellarX.h
* @摘要: 星垣(StellarX) GUI框架 - 主包含头文件
* @版本: v3.0.0
* @版本: v3.0.1
* @描述:
* 一个为Windows平台打造的轻量级、模块化C++ GUI框架。
* 基于EasyX图形库,提供简洁易用的API和丰富的控件。
@@ -12,7 +12,8 @@
* @作者: 我在人间做废物
* @邮箱: [3150131407@qq.com] | [ysm3150131407@gmail.com]
* @官网:https://stellarx-gui.top/
* @仓库: [https://github.com/Ysm-04/StellarX]
* @仓库: https://github.com/Ysm-04/StellarX
* @博客:https://blog.stellarx-gui.top/
*
* @许可证: MIT License
* @版权: Copyright (c) 2025 我在人间做废物
+8 -4
View File
@@ -21,13 +21,13 @@
#include "CoreTypes.h"
#include "Button.h"
#include "Canvas.h"
#define BUTMINHEIGHT 15
#define BUTMINWIDTH 30
#define BUTMINHEIGHT 15 //页签按钮最小尺寸,过小会导致显示问题
#define BUTMINWIDTH 30 //页签按钮最小尺寸,过小会导致显示问题
class TabControl :public Canvas
{
int tabBarHeight = BUTMINWIDTH; //页签栏高度
int tabBarHeight = BUTMINWIDTH; //页签栏高度
bool IsFirstDraw = true; //首次绘制标记
int defaultActivation = -1; //默认激活页签索引
int defaultActivation = -1; //默认激活页签索引
StellarX::TabPlacement tabPlacement = StellarX::TabPlacement::Top; //页签排列方式
std::vector<std::pair<std::unique_ptr<Button>, std::unique_ptr<Canvas>>> controls; //页签/页列表
@@ -35,6 +35,7 @@ private:
using Canvas::addControl; // 禁止外部误用
void addControl(std::unique_ptr<Control>) = delete; // 精准禁用该重载
private:
// 初始化页签按钮位置和尺寸
inline void initTabBar();
inline void initTabPage();
public:
@@ -42,6 +43,7 @@ public:
TabControl(int x, int y, int width, int height);
~TabControl();
//重写位置设置以适应页签和页面布局
void setX(int x)override;
void setY(int y)override;
@@ -67,6 +69,8 @@ public:
int count() const;
//通过页签文本返回索引
int indexOf(const std::string& tabText) const;
//设置脏区并请求重绘
void setDirty(bool dirty) override;
//请求父控件重绘
void requestRepaint(Control* parent)override;
};
+4 -1
View File
@@ -12,7 +12,9 @@
* - WM_GETMINMAXINFO:按最小“客户区”换算到“窗口矩形”,提供系统层最小轨迹值。
* - runEventLoop:只记录 WM_SIZE 的新尺寸;真正绘制放在 needResizeDirty 时集中处理。
*/
//fuck windows fuck win32
//fuck windows
//fuck win32
//fuck xiaomi
#pragma once
#include "Control.h"
@@ -55,6 +57,7 @@ class Window
public:
bool dialogClose = false; // 项目内使用的状态位,对话框关闭标志
mutable bool dialogOpen = false; // 项目内使用的状态位,对话框打开标志
// —— 构造/析构 ——(仅初始化成员;实际样式与子类化在 draw() 中完成)
Window(int width, int height, int mode);