1
回答
正在设计实现一个GUI框架,大家如果感兴趣,请参与讨论吧
科大讯飞通用文字识别100000次/天免费使用。立即申请   

框架已经断断续续写了1年多。名叫Hello ImGui(暂定),使用语言是C#。去年曾经在开源中国发帖子提到过

关于ImGui大家可以去看看dear ImGui这个C++写的IMGUI库, 以及这篇知乎的答案

主要是想要大家一起来看看API的设计如何。 请多多批评指正。

API的规范文档在这里(不是全部,但是我想初版要暴露的API应该是类似这些的):
https://github.com/zwcloud/ImGui-Spec/wiki/IMGUI-API-spec

这个贴可能没有说清楚,请大家指出有什么缺少的,有什么还应该写清楚的。(可惜开源中国的问答不能再次编辑,后面补充吧。)

(如果需要实时交流请将邮箱私聊发给我,我联系您。)

附上一个例程:

using ImGui;

namespace LayoutDemo
{
    public partial class Form1 : Form
    {
        public Form1()
            : base(new Point(400, 300), new Size(800, 600))
		{
		}

        public override void Dispose()
        {
        }

        protected override void OnGUI()
        {
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("auto-sized");
                GUILayout.Button("Top Button");
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Button("Middle Button##1");
                    GUILayout.Button("Middle Button##2");
                    GUILayout.Button("Middle Button##3");
                }
                GUILayout.EndHorizontal();
                GUILayout.Button("Bottom Button");
            }
            GUILayout.EndVertical();
            GUILayout.Space(10);
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("fixed-size");
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Button("Width:200", GUILayout.Width(200));
                    GUILayout.Button("Width:100", GUILayout.Width(100));
                    GUILayout.Button("Width:300", GUILayout.Width(300));
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndVertical();
            GUILayout.Space(10);
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("stretched: evenly spaced");
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Button("Button0", GUILayout.ExpandWidth(true));
                    GUILayout.Button("Button1", GUILayout.ExpandWidth(true));
                    GUILayout.Button("Button2", GUILayout.ExpandWidth(true));
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndVertical();
            GUILayout.Space(10);
            GUILayout.BeginVertical(Skin.current.Box);
            {
                GUILayout.Label("stretched: spaced with factors");
                GUILayout.BeginHorizontal(GUILayout.Width(500));
                {
                    GUILayout.Button("Stretch:1", GUILayout.StretchWidth(1));
                    GUILayout.Button("Stretch:2", GUILayout.StretchWidth(2));
                    GUILayout.Button("Stretch:3", GUILayout.StretchWidth(3));
                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndVertical();
        }
    }
}

结果(字体的抗锯齿显示还没做,现在比较丑

主要是想要大家一起来看看API的设计如何。不讨论其他类型的GUI框架,不进行比较。

已在知乎发表问题: https://www.zhihu.com/question/53979466

<无标签>
举报
zwcloud
发帖于1年前 1回/276阅
顶部