FORGE KUI / learn

用 C 打开原生窗口

从预编译程序走到 C ABI、DOM 和定时器。

版本 3.61.7

第12课
准备
Windows x64、C SDK、CMake 与 MSVC 工具链
学完可以做
编译并修改一个由 C 驱动的窗口
申请获取 SDK →C SDK · Windows x64

先看运行结果

在 C SDK 根目录运行。窗口默认 4 秒后自行退出;参数 0 会一直显示,直到手动关闭。先确认能看到标题和每秒变化的 tick。

powershell
.\bin\kui_c_example_window_demo.exe 0

只编译这个示例

包内 examples/CMakeLists.txt 通过 KuiC::C 链接 C ABI,并复制所需运行库。首次配置后只构建 window_demo,避免编译整套示例。

powershell
cmake -S examples -B build-c-examples -A x64 "-DKuiC_DIR=$PWD/cmake"
cmake --build build-c-examples --config Release --target kui_c_example_window_demo
.\build-c-examples\Release\kui_c_example_window_demo.exe 0

窗口、文档与事件循环

源码先初始化平台、创建窗口,再加载 HTML。定时器在消息循环中更新 #ticks;退出后释放 Document 和 Window。返回的句柄有所有权,不能省掉释放。

c
    CHECK(kui_platform_init());

    /* Zero first: every field treats 0 as "library default", so only what
     * matters needs setting. */
    memset(&props, 0, sizeof props);
    props.title    = "KUI C ABI - window demo";
    props.width    = 720;
    props.height   = 460;
    props.centered = 1;

    CHECK(kui_window_create(&props, &win));

    /* The window owns its document; this hands back a counted reference. */
    CHECK(kui_window_get_document(win, &doc));
    CHECK(kui_document_load_html(doc, kHtml, 0));

    /* Created windows are already visible, but showing again is harmless and
     * makes the intent explicit. */
    CHECK(kui_window_show(win));

改一个可见结果

在 examples/window_demo.c 的 kHtml 中把 Hello from C 改成自己的标题。重建目标程序,运行 build-c-examples 下的新 EXE,确认标题改变,tick 仍持续更新。

c
"  <h1 id='title'>Hello from C</h1>"

遇到问题时

配置失败先核对 cmake/KuiCConfig.cmake 是否在解压后的 SDK 中;程序启动失败检查 EXE 同目录的运行库;窗口一闪而过则确认运行命令带了 0。

文档有误或遗漏?

反馈此页问题 →