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按需定制 |
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.
浙公网安备 33010602011771号