试用C语言GUI库:libui

libui是一个简单易用的C语言GUI库。

1. 编译libui

(1) 从官网下载libui的源码

下载地址:https://github.com/andlabs/libui

(2) 根据README的说明进行构建

$ # you must be in the top-level libui directory, otherwise this won't work
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make tester         # for the test program
$ make examples       # for examples

执行cmake时报错,相关信息如下:

-- No package 'gtk+-3.0' found
CMake Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:367 (message):
A required package was not found
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:532 (_pkg_check_modules_internal)
unix/CMakeLists.txt:4 (pkg_check_modules)

解决方法为安装libgtk,即:

sudo apt-get install libgtk-3-dev

编译完成后,生成的共享库位于build/out目录。

libui.so
libui.so.0

2. 编写测试代码

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ui.h>

int onClosing(uiWindow *w, void *data)
{
    uiQuit();
    return 1;
}

void onClicked(uiButton *b, void *data)
{
    char msg[32] = "Button is clicked!";
    uiLabelSetText(uiLabel(data), msg);
    puts(msg);
}

int main(void)
{
    uiInitOptions o;
    const char *err;
    uiWindow *w;
    uiGrid *g;
    uiLabel *l;
    uiButton *b;

    memset(&o, 0, sizeof(uiInitOptions));
    err = uiInit(&o);
    if (err != NULL) {
        puts(err);
        uiFreeInitError(err);
        return 1;
    }

    // 创建Window
    w = uiNewWindow("libui测试", 320, 240, 0);
    uiWindowSetMargined(w, 1);

    // 创建Grid
    g = uiNewGrid();
    uiGridSetPadded(g, 1);
    uiWindowSetChild(w, uiControl(g));

    // 创建Label
    l = uiNewLabel("I am a label.");
    uiGridAppend(g, uiControl(l),
        0, 2, 2, 1,
        1, uiAlignCenter, 1, uiAlignFill);

    // 创建Button,注册按钮点击时的回调函数
    b = uiNewButton("Click me!");
    uiButtonOnClicked(b, onClicked, l);
    uiGridAppend(g, uiControl(b),
        0, 2, 2, 1,
        1, uiAlignCenter, 1, uiAlignEnd);

    // 注册窗口关闭时的回调函数
    uiWindowOnClosing(w, onClosing, NULL);

    // 显示窗口
    uiControlShow(uiControl(w));

    // 启动主循环
    uiMain();

    return 0;
}

3. 编译、运行:

# 注意将libui.so加入共享库搜索路径
gcc main.c -l ui -L . -I ~/dev/C/libui-master -o main
./main

效果如下:

libui测试

使用 Hugo 构建
主题 StackJimmy 设计