新做的一个基于OPENGL的gui库

#include <BGE/All>

using namespace bge;

Window* createButton(const std::string& name,const String& text)
{
    Button* button = new Button(0,text);
    button->setName(name);
    button->setSize(Vector2f(92,42));
    return button;
}

int main(int argc, char* argv[])
{
    FileSystem::instance().initial(argv[0]);
    FileSystem::instance().setResourcePackage("data.zip");
    WindowManager::instance().initialize("simkai.ttf",false);

Device* device = Device::create();
    device->initial();
    device->createWindow(640,480,bge::String("BGE Window"));

Panel* panel = new Panel(FloatRect(30,30,192,180),0);
    GridLayout* layout = new GridLayout();
    panel->setLayout(layout);
    std::vector<float> widths;
    widths.push_back(0.0f);
    layout->setColumnWidths(widths);

std::vector<float> heights;
    for(int k = 0; k < 3; ++k)
        heights.push_back(48.0f);
    heights.push_back(0.0f);
    layout->setRowHeights(heights);

GridCellInfo info;
    info.columnIndex_ = 0; info.rowIndex_ = 0; layout->addWindow(createButton("button1",L"按键"),info);
    info.columnIndex_ = 1; info.rowIndex_ = 0; layout->addWindow(createButton("button2",L"按键"),info);
    info.columnIndex_ = 0; info.rowIndex_ = 1; layout->addWindow(createButton("button3",L"按键"),info);
    info.columnIndex_ = 1; info.rowIndex_ = 1; layout->addWindow(createButton("button4",L"按键"),info);
    info.columnIndex_ = 0;
    info.rowIndex_ = 2;
    info.horizontalSpan_ = 2;
    Window* edit = new EditField(NULL,L"Edit Text");
    edit->setSize(Vector2f(196,36));
    layout->addWindow(edit,info);
    info.columnIndex_ = 0;
    info.rowIndex_ = 3;
    info.horizontalSpan_ = 3;
    layout->arrangeWithin();

FrameWindow* window = new FrameWindow();
    window->enableMovement();
    window->setText(L"BGE窗体");
    window->setClientPanel(panel);

WindowManager::instance().addWindow(window);

while(device->isRunning())
    {
        device->preRender();
        WindowManager::instance().update();
        device->swapBuffers();
        device->pollEvents();
    }

WindowManager::instance().terminate();
    device->closeWindow();
    device->terminate();
    device->deleteLater();
    return 0;
}

显示如下:

在开发上参考了Qt等软件,支持常见控件,控件序列化,整体换肤,控件换肤

以上代码写的相当啰嗦 其实可以这样写:

int main(int argc, char* argv[])
{
    FileSystem::instance().initial(argv[0]);
    FileSystem::instance().setResourcePackage("data.zip");
    WindowManager::instance().initialize("simkai.ttf",false);

Device* device = Device::create();
    device->initial();
    device->createWindow(640,480,bge::String("BGE Window"));

Window* window = WindowManager::instance().createWindow("ui.xml");
    if(window)
        WindowManager::instance().addWindow(window);

while(device->isRunning())
    {
        device->preRender();
        WindowManager::instance().update();
        device->swapBuffers();
        device->pollEvents();
    }

WindowManager::instance().terminate();
    device->closeWindow();
    device->terminate();
    device->deleteLater();
    return 0;
}

做这个不为别的就是想做

现在有点小问题,修改好了我会上源码

欢饮指点~

时间: 2024-10-21 21:34:48

新做的一个基于OPENGL的gui库的相关文章

Axios 是一个基于 promise 的 HTTP 库

NPM地址:https://www.npmjs.com/package/axios 安装 使用 npm: $ npm install axios 使用 bower: $ bower install axios 使用 cdn: <script src="https://unpkg.com/axios/dist/axios.min.js"></script> Example 执行 GET 请求 // 为给定 ID 的 user 创建请求axios.get('/use

为老婆教5岁儿子学习英语单词做的一个基于微信公众平台的应用

起源:家里买了好些小孩子学习的墙贴,娘子都把其全教会了儿子.一天我问起娘子,最近有没有教儿子学习单词啊,她说她会的都教完了.我沉思了一会,好吧老婆,我做个应用给你.于是乎就有了下面的图: 想试下的同学可以关注楼主的公众帐号来看看:webworking 二维码:

【TGUI】从零开始搭建一个基于Unity的UI库 01

作为一个初学Unity3D一个来月的小菜鸟,要想自己搭建一个UI库也是挺疯狂的,但是老大不给用NGUI,然后那时候Unity4.6正式版还没发布(或者说我还不知道Unity4.6有自带UI),然后就无所畏惧的写下来了,目前虽然功能很简陋,实现的控件也非常少,但是作为练手的目的已经达成了,所以放上来给大家分享. -------------------------------------------------- 分割线 ---------------------------------------

Python GUI库

PyQT不错的,只是要小心,这个东西是GPL的,如果你要写商业程序需要购买商业版授权.另外PyGTK.wxPython都是不错的GUI库.Python自带了一个基于TkInter的GUI库,如果你不想引入第三方的依赖性,这就是唯一的选择.如果你在Mac下写程序的话,Cocoa+PyObjC也不错.另外,Java版的Python,也就是Jython,可以使用Java的GUI库如AWT/Swing或者SWT:.Net/CLI版的IronPython可以使用.Net/CLI支持的GUI库如WinFor

设计一个基于GUI的扑克程序

在本课程教材扑克牌代码的基础上,设计一个基于GUI的扑克程序 a) 可以显示 52 张扑克牌,包括洗牌,发牌在内(2) b) 可以点击显示任何一张牌(1) c) 扑克翻面且突出显示(1) d) 扑克分组,例如 4 组,2 组.可以给每个组一定数量的牌(1) e) 按照一定的排序规则对分组牌进行排序(1) f) 发牌过程用动画显示(选做)(2)

基于OpenGL编写一个简易的2D渲染框架-05 渲染文本

阅读文章前需要了解的知识:文本渲染 https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/ 简要步骤: 获取要绘制的字符的 Unicode 码,使用 FreeType 库获取对应的位图数据,添加到字符表中(后面同样的字符可以再表中直接索引),将字符表上的字符填充到一张纹理上.计算每个字符的纹理坐标,使用渲染器绘制 注意的问题: 对于中英文混合的字符串,使用 char 存储时,英文字符占 1 个字节,而中

扩展一个boot的插件—tooltip&amp;做一个基于boot的表达验证

在线演示 本地下载 (代码太多请查看原文) 加班,加班加班,我爱加班··· 我已经疯了,哦也. 这次发一个刚接触boot的时候用boot做的表单验证,我们扩展一下tooltip的插件,让他可以换颜色. 其实挺简单的,主要是考究代码阅读的能力. boot的代码写的很简单,能省略“;”的地方就省略掉了,而且他的闭包也很有意思 +function($){ }(jQuery); 这种写法等同于 (function($){ })(jQuery); 少些一个符号,比较节俭. 他的对外接口写的就比较正常了:

基于OpenGL ES 的深度学习框架编写

基于OpenGL ES的深度学习框架编写 背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框架. 同类型的库 caffe-android-lib 目前应该是最便于集成使用的深度学习框架库. tensorflow和mxnet据说也有对应的android库,因时间原因暂未测试. CNNdroid,网址https://zhuanlan.zhihu.com/p/25259452,这个是用 ren

基于OpenGL三维软件开发

实验原理: OpenGL在MFC下编程原理---- Windows操作系统对OpenGL的支持 在Windows下用GDI作图必须通过设备上下文(DeviceContext简写DC)调用相应的函数:用OpenGL作图也是类似,OpenGL函数是通过"渲染上下文"(RenderingContext简写RC)完成三维图形的绘制.Windows下的窗口和设备上下文支持"位图格式"(PIXELFORMAT)属性, 和RC有着位图结构上的一致.只要在创建RC时与一个DC建立联