[{"data":1,"prerenderedAt":305},["ShallowReactive",2],{"doc-\u002Fdocs\u002Fapi\u002Feduwin-app-api":3},{"id":4,"title":5,"body":6,"description":23,"extension":299,"meta":300,"navigation":243,"path":301,"seo":302,"stem":303,"__hash__":304},"content\u002Fdocs\u002Fapi\u002Feduwin-app-api.md","eduwin 应用框架 API",{"type":7,"value":8,"toc":294},"minimark",[9,13,17,34,38,47,54,63,66,69,72,81,84,93,104,115,125,134,141,149,152,154,157,166,173,182,192,251,290],[10,11,5],"h1",{"id":12},"eduwin-应用框架-api",[14,15,16],"h2",{"id":16},"应用生命周期",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-c shiki shiki-themes github-light github-dark","int init_app(void);\n","c","",[25,26,27],"code",{"__ignoreMap":23},[28,29,32],"span",{"class":30,"line":31},"line",1,[28,33,21],{},[35,36,37],"p",{},"初始化 eduwin 框架。必须在任何其他 eduwin 函数之前调用，成功返回 0，失败返回 -1。",[18,39,41],{"className":20,"code":40,"language":22,"meta":23,"style":23},"void run_app(void);\n",[25,42,43],{"__ignoreMap":23},[28,44,45],{"class":30,"line":31},[28,46,40],{},[35,48,49,50,53],{},"启动消息循环（阻塞），直到 ",[25,51,52],{},"quit_app()"," 被调用才返回。创建第一个窗口后，该窗口关闭时自动退出消息循环。",[18,55,57],{"className":20,"code":56,"language":22,"meta":23,"style":23},"void quit_app(void);\n",[25,58,59],{"__ignoreMap":23},[28,60,61],{"class":30,"line":31},[28,62,56],{},[35,64,65],{},"退出消息循环。",[67,68],"hr",{},[14,70,71],{"id":71},"窗口",[18,73,75],{"className":20,"code":74,"language":22,"meta":23,"style":23},"HWND create_window(const WCHAR *title, int width, int height);\n",[25,76,77],{"__ignoreMap":23},[28,78,79],{"class":30,"line":31},[28,80,74],{},[35,82,83],{},"创建一个标准重叠窗口（带标题栏、边框、可缩放）。",[18,85,87],{"className":20,"code":86,"language":22,"meta":23,"style":23},"HWND create_hidden_window(int w, int h);\n",[25,88,89],{"__ignoreMap":23},[28,90,91],{"class":30,"line":31},[28,92,86],{},[35,94,95,96,99,100,103],{},"创建一个不显示的傀儡窗口（",[25,97,98],{},"WS_POPUP"," + ",[25,101,102],{},"STATIC"," 类），最轻量、无边框、全程不可见。",[35,105,106,110,111,114],{},[107,108,109],"strong",{},"用途："," 某些子系统（如 WebView2）强制要求传入有效的父窗口句柄，传 ",[25,112,113],{},"NULL"," 会崩溃。在 headless \u002F 后台服务模式下，用此函数创建一个不可见的\"挂架\"窗口。",[35,116,117,120,121,124],{},[107,118,119],{},"销毁："," 程序退出时自行 ",[25,122,123],{},"DestroyWindow","。",[18,126,128],{"className":20,"code":127,"language":22,"meta":23,"style":23},"void show_window(HWND win);\n",[25,129,130],{"__ignoreMap":23},[28,131,132],{"class":30,"line":31},[28,133,127],{},[35,135,136,137,140],{},"创建一个窗口，",[25,138,139],{},"title"," 是标题栏文本。返回窗口句柄。",[18,142,143],{"className":20,"code":127,"language":22,"meta":23,"style":23},[25,144,145],{"__ignoreMap":23},[28,146,147],{"class":30,"line":31},[28,148,127],{},[35,150,151],{},"显示窗口。必须在添加完所有控件和菜单后调用。",[67,153],{},[14,155,156],{"id":156},"事件",[18,158,160],{"className":20,"code":159,"language":22,"meta":23,"style":23},"void on_window_close(HWND win, int (*callback)(void *), void *data);\n",[25,161,162],{"__ignoreMap":23},[28,163,164],{"class":30,"line":31},[28,165,159],{},[35,167,168,169,172],{},"注册窗口关闭事件。",[25,170,171],{},"callback"," 返回 1 时关闭窗口，返回 0 则不关闭。",[18,174,176],{"className":20,"code":175,"language":22,"meta":23,"style":23},"void on_window_resize(HWND win, void (*callback)(int w, int h));\n",[25,177,178],{"__ignoreMap":23},[28,179,180],{"class":30,"line":31},[28,181,175],{},[35,183,184,185,187,188,191],{},"注册窗口大小变化事件。",[25,186,171],{}," 的参数是窗口",[107,189,190],{},"客户区","的宽和高（像素），不含标题栏和边框。",[18,193,195],{"className":20,"code":194,"language":22,"meta":23,"style":23},"\u002F\u002F 窗口缩放时在状态栏显示客户区尺寸\nvoid on_size(int w, int h)\n{\n    WCHAR buf[128];\n    str_format(buf, 128, L\"Client: %d x %d\", w, h);\n    statusbar_set_text(sb, buf);\n}\n\non_window_resize(win, on_size);\n",[25,196,197,202,208,214,220,226,232,238,245],{"__ignoreMap":23},[28,198,199],{"class":30,"line":31},[28,200,201],{},"\u002F\u002F 窗口缩放时在状态栏显示客户区尺寸\n",[28,203,205],{"class":30,"line":204},2,[28,206,207],{},"void on_size(int w, int h)\n",[28,209,211],{"class":30,"line":210},3,[28,212,213],{},"{\n",[28,215,217],{"class":30,"line":216},4,[28,218,219],{},"    WCHAR buf[128];\n",[28,221,223],{"class":30,"line":222},5,[28,224,225],{},"    str_format(buf, 128, L\"Client: %d x %d\", w, h);\n",[28,227,229],{"class":30,"line":228},6,[28,230,231],{},"    statusbar_set_text(sb, buf);\n",[28,233,235],{"class":30,"line":234},7,[28,236,237],{},"}\n",[28,239,241],{"class":30,"line":240},8,[28,242,244],{"emptyLinePlaceholder":243},true,"\n",[28,246,248],{"class":30,"line":247},9,[28,249,250],{},"on_window_resize(win, on_size);\n",[252,253,254,259],"blockquote",{},[35,255,256],{},[107,257,258],{},"回调签名说明：",[35,260,261,264,265,268,269,272,273,276,277,264,280,283,284,287,288,124],{},[25,262,263],{},"on_window_resize"," 的回调是 ",[25,266,267],{},"void (*)(int w, int h)","，",[107,270,271],{},"不是"," ",[25,274,275],{},"void (*)(void *)","。\n",[25,278,279],{},"on_window_close",[25,281,282],{},"int (*)(void *)","。\n其他控件事件（如 ",[25,285,286],{},"on_button_click","）的回调是 ",[25,289,275],{},[291,292,293],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":204,"depth":204,"links":295},[296,297,298],{"id":16,"depth":204,"text":16},{"id":71,"depth":204,"text":71},{"id":156,"depth":204,"text":156},"md",{},"\u002Fdocs\u002Fapi\u002Feduwin-app-api",{"title":5,"description":23},"docs\u002Fapi\u002Feduwin-app-api","_uIorCvjMGLv7vTZHZGAijDnj7BSmaoz1M-yhtcbrtg",1782488679846]