feat: add a new awesome feature

This commit is contained in:
2025-11-04 16:48:53 +08:00
parent 8dee285de8
commit 7b087e296a
22 changed files with 210 additions and 58 deletions

View File

@@ -60,6 +60,7 @@ public:
void setIsVisible(bool visible) override;
void setDirty(bool dirty) override;
void onWindowResize() override;
void requestRepaint(Control* parent)override;
//获取子控件列表
std::vector<std::unique_ptr<Control>>& getControls() { return controls; }
private:

View File

@@ -61,8 +61,8 @@ protected:
Control(const Control&) = delete;
Control& operator=(const Control&) = delete;
Control(Control&&) = default;
Control& operator=(Control&&) = default;
Control(Control&&) = delete;
Control& operator=(Control&&) = delete;
Control() : localx(0),x(0), localy(0),y(0), localWidth(100),width(100),height(100), localHeight(100) {}
Control(int x, int y, int width, int height)
@@ -85,14 +85,15 @@ public:
discardBackground();
}
protected:
virtual void requestRepaint();
//向上请求重绘
virtual void requestRepaint(Control* parent);
//根控件/无父时触发重绘
virtual void onRequestRepaintAsRoot();
protected:
//保存背景快照
void saveBackground(int x, int y, int w, int h);
virtual void saveBackground(int x, int y, int w, int h);
// putimage 回屏
void restBackground();
virtual void restBackground();
// 释放快照(窗口重绘/尺寸变化后必须作废)
void discardBackground();
public:

View File

@@ -20,7 +20,7 @@
#pragma once
#include"StellarX.h"
#define closeButtonWidth 23 //关闭按钮宽度
#define closeButtonWidth 30 //关闭按钮宽度
#define closeButtonHeight 20 //关闭按钮高度 同时作为对话框标题栏高度
#define functionButtonWidth 70 //按钮宽度
#define functionButtonHeight 30 //按钮高度
@@ -29,7 +29,7 @@
#define buttonAreaHeight 50 //按钮区域高度
#define titleToTextMargin 10 //标题到文本的距离
#define textToBorderMargin 10 //文本到边框的距离
#define BorderWidth 3 //边框宽度
class Dialog : public Canvas
{
Window& hWnd; //窗口引用
@@ -37,7 +37,6 @@ class Dialog : public Canvas
int textWidth = 0; //文本宽度
int textHeight = 0; //文本高度
int buttonNum = 0; // 按钮数量
int BorderWidth = 2; //边框宽度
StellarX::MessageBoxType type = StellarX::MessageBoxType::OK; //对话框类型
std::string titleText = "提示"; //标题文本
@@ -124,11 +123,14 @@ private:
void getTextSize();
//初始化对话框尺寸
void initDialogSize();
void saveBackground(int x, int y, int w, int h)override;
void restBackground()override;
// 清除所有控件
void clearControls();
//创建对话框按钮
std::unique_ptr<Button> createDialogButton(int x, int y, const std::string& text);
void requestRepaint(Control* parent) override;
};

View File

@@ -1,7 +1,7 @@
/*******************************************************************************
* @文件: StellarX.h
* @摘要: 星垣(StellarX) GUI框架 - 主包含头文件
* @版本: v2.2.0
* @版本: v2.2.1
* @描述:
* 一个为Windows平台打造的轻量级、模块化C++ GUI框架。
* 基于EasyX图形库提供简洁易用的API和丰富的控件。

View File

@@ -62,5 +62,7 @@ public:
int count() const;
//通过页签文本返回索引
int indexOf(const std::string& tabText) const;
void setDirty(bool dirty) override;
void requestRepaint(Control* parent)override;
};

View File

@@ -22,10 +22,8 @@
class Label : public Control
{
std::string text; //标签文本
COLORREF textBkColor; //标签背景颜色
bool textBkDisap = false; //标签背景是否透明
COLORREF textBkColor; //标签背景颜色
bool textBkDisap = false; //标签背景是否透明
//标签事件处理(标签无事件)不实现具体代码
bool handleEvent(const ExMessage& msg) override { return false; }

View File

@@ -76,6 +76,8 @@ public:
COLORREF getBkcolor() const;
//获取窗口背景图片
IMAGE* getBkImage() const;
//获取窗口背景图片文件名
std::string getBkImageFile() const;
//获取控件管理
std::vector<std::unique_ptr<Control>>& getControls();