wtl的增量改进.

序号要求
1不能带DLL,必须是静态链接,尽量小依赖.
2代码必须足够小,一般来说要500KB左右最好.
3较好看图形效果,过场动画,半透明阴影光圈什么的.

用WTL写,静态链接只有50KB左右,但只能创建使用基础标准控件,做个透明窗口都要自己再用其他API实现.
实现GUI库,有几个基本的子系统:

序号系统
1窗口管理系统,用wtl封装.不派生
2事件系统,用sigslot.基于模板,只头文件,
3图形系统,写个GDI+的包装,解决png/jpg编码,FrameBuffer支持RGBA,用UpdateLayeredWindow更新窗口,实现半透明异形窗口图形效果,实现阴影边缘什么的.
4布局系统,xml/json.自用mjson,根据描述构建窗口控件对象树.未实现复杂布局,只实现Anchor布局.
5串/容器,实现写时复制/统一内存池,用eastl.
6杂项工具:基本算法,MD5 SHA1 ZIP 7Z,网络支持,TCP UDP HTTP,简单的select,HTTP封装WinHTTP.IO支持,RFile RStream
7基本控件,RButton RLabel RTextEdit按需定制

sigslot下载地址
mjson

class RWindow : public RObject
{//包装wtl
private:
    RWindowPrivate *d;
};

class RWindowPrivate
{
public:
    CWindow m_wnd;
};

使用:

class RWindow : public RObject
{//信号槽
    sigslot::signal0<> Clicked
}

class MyApp
{
    void on_clicked()
    {
    }
    void init()
    {
        m_win.Clicked.connect(this, &MyApp::on_clicked);
    }

    RWindow m_win;
}

控件设定好对象名,在C++里提供

template<typename T>
T *findObject(const RString &name)
//手动绑定

gui要有配套工具链,大工程推荐qt.还可以再绑定脚本,如lua.

posted @   zjh6  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示