eduwin 应用框架 API

应用生命周期

int init_app(void);

初始化 eduwin 框架。必须在任何其他 eduwin 函数之前调用,成功返回 0,失败返回 -1。

void run_app(void);

启动消息循环(阻塞),直到 quit_app() 被调用才返回。创建第一个窗口后,该窗口关闭时自动退出消息循环。

void quit_app(void);

退出消息循环。


窗口

HWND create_window(const WCHAR *title, int width, int height);

创建一个标准重叠窗口(带标题栏、边框、可缩放)。

HWND create_hidden_window(int w, int h);

创建一个不显示的傀儡窗口(WS_POPUP + STATIC 类),最轻量、无边框、全程不可见。

用途: 某些子系统(如 WebView2)强制要求传入有效的父窗口句柄,传 NULL 会崩溃。在 headless / 后台服务模式下,用此函数创建一个不可见的"挂架"窗口。

销毁: 程序退出时自行 DestroyWindow

void show_window(HWND win);

创建一个窗口,title 是标题栏文本。返回窗口句柄。

void show_window(HWND win);

显示窗口。必须在添加完所有控件和菜单后调用。


事件

void on_window_close(HWND win, int (*callback)(void *), void *data);

注册窗口关闭事件。callback 返回 1 时关闭窗口,返回 0 则不关闭。

void on_window_resize(HWND win, void (*callback)(int w, int h));

注册窗口大小变化事件。callback 的参数是窗口客户区的宽和高(像素),不含标题栏和边框。

// 窗口缩放时在状态栏显示客户区尺寸
void on_size(int w, int h)
{
    WCHAR buf[128];
    str_format(buf, 128, L"Client: %d x %d", w, h);
    statusbar_set_text(sb, buf);
}

on_window_resize(win, on_size);

回调签名说明:

on_window_resize 的回调是 void (*)(int w, int h)不是 void (*)(void *)on_window_close 的回调是 int (*)(void *)。 其他控件事件(如 on_button_click)的回调是 void (*)(void *)