[{"data":1,"prerenderedAt":1682},["ShallowReactive",2],{"doc-\u002Fdocs\u002Fapi\u002Feduwin-ctrl-api":3},{"id":4,"title":5,"body":6,"description":31,"extension":1675,"meta":1676,"navigation":1677,"path":1678,"seo":1679,"stem":1680,"__hash__":1681},"content\u002Fdocs\u002Fapi\u002Feduwin-ctrl-api.md","eduwin 控件 API",{"type":7,"value":8,"toc":1629},"minimark",[9,13,17,21,25,49,52,64,67,76,83,104,107,116,123,138,141,161,168,171,180,183,198,213,233,236,262,310,317,332,335,338,341,356,363,394,396,399,408,411,456,471,473,476,485,498,500,503,512,519,521,524,533,541,543,546,566,581,583,586,604,614,616,619,628,631,633,636,661,676,678,681,711,728,730,733,748,755,757,760,780,791,793,796,816,826,828,831,851,862,864,867,882,889,904,906,909,924,931,933,936,990,993,1043,1068,1070,1073,1108,1119,1125,1145,1155,1164,1167,1176,1179,1188,1194,1196,1199,1224,1235,1244,1273,1275,1278,1287,1290,1292,1296,1316,1327,1329,1332,1347,1354,1356,1359,1368,1375,1377,1381,1384,1393,1400,1420,1437,1446,1449,1458,1461,1486,1502,1504,1507,1510,1519,1538,1541,1550,1557,1560,1569,1575,1577,1580,1583,1592,1595,1598,1607,1610,1613,1622,1625],[10,11,5],"h1",{"id":12},"eduwin-控件-api",[14,15,16],"h2",{"id":16},"辅助函数",[18,19,20],"p",{},"以下函数适用于多种控件类型。",[22,23,24],"h3",{"id":24},"文本内容",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-c shiki shiki-themes github-light github-dark","void set_text(HWND hwnd, const WCHAR *text);\nconst WCHAR *get_text(HWND hwnd);\n","c","",[33,34,35,43],"code",{"__ignoreMap":31},[36,37,40],"span",{"class":38,"line":39},"line",1,[36,41,42],{},"void set_text(HWND hwnd, const WCHAR *text);\n",[36,44,46],{"class":38,"line":45},2,[36,47,48],{},"const WCHAR *get_text(HWND hwnd);\n",[18,50,51],{},"设置\u002F获取控件的文本内容。适用于按钮、标签、文本框、输入框、状态栏等。",[53,54,55],"blockquote",{},[18,56,57,60,61,63],{},[33,58,59],{},"get_text"," 内部为每个控件独立分配缓冲区，多次调用返回不同指针，互不干扰。缓冲区在下次对同一控件调用 ",[33,62,59],{}," 时自动释放。",[22,65,66],{"id":66},"只读控制",[26,68,70],{"className":28,"code":69,"language":30,"meta":31,"style":31},"void set_readonly(HWND hwnd, int readonly);\n",[33,71,72],{"__ignoreMap":31},[36,73,74],{"class":38,"line":39},[36,75,69],{},[18,77,78,79,82],{},"将文本框、多行文本框、密码框设为只读或可编辑。",[33,80,81],{},"readonly"," 为 1 时只读，为 0 时可编辑。",[26,84,86],{"className":28,"code":85,"language":30,"meta":31,"style":31},"HWND text = create_text(win, L\"只读内容\", 10, 10, 200, 24);\nset_readonly(text, 1);   \u002F\u002F 设为只读\nset_readonly(text, 0);   \u002F\u002F 恢复可编辑\n",[33,87,88,93,98],{"__ignoreMap":31},[36,89,90],{"class":38,"line":39},[36,91,92],{},"HWND text = create_text(win, L\"只读内容\", 10, 10, 200, 24);\n",[36,94,95],{"class":38,"line":45},[36,96,97],{},"set_readonly(text, 1);   \u002F\u002F 设为只读\n",[36,99,101],{"class":38,"line":100},3,[36,102,103],{},"set_readonly(text, 0);   \u002F\u002F 恢复可编辑\n",[22,105,106],{"id":106},"启用禁用",[26,108,110],{"className":28,"code":109,"language":30,"meta":31,"style":31},"void set_enable(HWND hwnd, int enable);\n",[33,111,112],{"__ignoreMap":31},[36,113,114],{"class":38,"line":39},[36,115,109],{},[18,117,118,119,122],{},"启用或禁用控件。",[33,120,121],{},"enable"," 为 1 时可用，为 0 时禁用（灰显且不可操作）。",[26,124,126],{"className":28,"code":125,"language":30,"meta":31,"style":31},"set_enable(btn_delete, 0);  \u002F\u002F 禁用删除按钮\nset_enable(btn_delete, 1);  \u002F\u002F 启用删除按钮\n",[33,127,128,133],{"__ignoreMap":31},[36,129,130],{"class":38,"line":39},[36,131,132],{},"set_enable(btn_delete, 0);  \u002F\u002F 禁用删除按钮\n",[36,134,135],{"class":38,"line":45},[36,136,137],{},"set_enable(btn_delete, 1);  \u002F\u002F 启用删除按钮\n",[22,139,140],{"id":140},"显隐",[26,142,144],{"className":28,"code":143,"language":30,"meta":31,"style":31},"void show(HWND hwnd);\nvoid hide(HWND hwnd);\nint  is_visible(HWND hwnd);\n",[33,145,146,151,156],{"__ignoreMap":31},[36,147,148],{"class":38,"line":39},[36,149,150],{},"void show(HWND hwnd);\n",[36,152,153],{"class":38,"line":45},[36,154,155],{},"void hide(HWND hwnd);\n",[36,157,158],{"class":38,"line":100},[36,159,160],{},"int  is_visible(HWND hwnd);\n",[18,162,163,164,167],{},"显示或隐藏控件。",[33,165,166],{},"is_visible"," 返回 1 表示可见，0 表示隐藏。",[22,169,170],{"id":170},"布局",[26,172,174],{"className":28,"code":173,"language":30,"meta":31,"style":31},"void move(HWND hwnd, int x, int y);\n",[33,175,176],{"__ignoreMap":31},[36,177,178],{"class":38,"line":39},[36,179,173],{},[18,181,182],{},"移动控件到指定位置（仅改变位置，不改变尺寸）。",[26,184,186],{"className":28,"code":185,"language":30,"meta":31,"style":31},"void set_size(HWND hwnd, int w, int h);\nvoid get_size(HWND hwnd, int *w, int *h);\n",[33,187,188,193],{"__ignoreMap":31},[36,189,190],{"class":38,"line":39},[36,191,192],{},"void set_size(HWND hwnd, int w, int h);\n",[36,194,195],{"class":38,"line":45},[36,196,197],{},"void get_size(HWND hwnd, int *w, int *h);\n",[18,199,200,201,204,205,208,209,212],{},"设置或获取控件的客户区尺寸。",[33,202,203],{},"w"," 或 ",[33,206,207],{},"h"," 可传 ",[33,210,211],{},"NULL"," 跳过读取。",[26,214,216],{"className":28,"code":215,"language":30,"meta":31,"style":31},"int cw, ch;\nget_size(win, &cw, &ch);    \u002F\u002F 获取窗口客户区宽高\nset_size(btn, 120, 30);     \u002F\u002F 调整按钮尺寸\n",[33,217,218,223,228],{"__ignoreMap":31},[36,219,220],{"class":38,"line":39},[36,221,222],{},"int cw, ch;\n",[36,224,225],{"class":38,"line":45},[36,226,227],{},"get_size(win, &cw, &ch);    \u002F\u002F 获取窗口客户区宽高\n",[36,229,230],{"class":38,"line":100},[36,231,232],{},"set_size(btn, 120, 30);     \u002F\u002F 调整按钮尺寸\n",[22,234,235],{"id":235},"窗口样式与扩展属性",[26,237,239],{"className":28,"code":238,"language":30,"meta":31,"style":31},"LONG_PTR get_style(HWND hwnd);\nvoid set_style(HWND hwnd, LONG_PTR style);\nLONG_PTR get_attr(HWND hwnd);\nvoid set_attr(HWND hwnd, LONG_PTR attr);\n",[33,240,241,246,251,256],{"__ignoreMap":31},[36,242,243],{"class":38,"line":39},[36,244,245],{},"LONG_PTR get_style(HWND hwnd);\n",[36,247,248],{"class":38,"line":45},[36,249,250],{},"void set_style(HWND hwnd, LONG_PTR style);\n",[36,252,253],{"class":38,"line":100},[36,254,255],{},"LONG_PTR get_attr(HWND hwnd);\n",[36,257,259],{"class":38,"line":258},4,[36,260,261],{},"void set_attr(HWND hwnd, LONG_PTR attr);\n",[263,264,265,292],"ul",{},[266,267,268,271,272,275,276,279,280,283,284,287,288,291],"li",{},[33,269,270],{},"get_style"," \u002F ",[33,273,274],{},"set_style"," 读取或设置窗口样式（",[33,277,278],{},"GWL_STYLE","，对应 ",[33,281,282],{},"WS_*"," 常量，如 ",[33,285,286],{},"WS_THICKFRAME","、",[33,289,290],{},"WS_BORDER","）",[266,293,294,271,297,300,301,279,304,283,307,291],{},[33,295,296],{},"get_attr",[33,298,299],{},"set_attr"," 读取或设置窗口扩展样式（",[33,302,303],{},"GWL_EXSTYLE",[33,305,306],{},"WS_EX_*",[33,308,309],{},"WS_EX_TOOLWINDOW",[18,311,312,271,314,316],{},[33,313,274],{},[33,315,299],{}," 调用后会自动刷新窗口的非客户区，确保样式变更立即生效。",[26,318,320],{"className":28,"code":319,"language":30,"meta":31,"style":31},"\u002F\u002F 为窗口添加可缩放边框和最大化按钮\nset_style(win, get_style(win) | WS_THICKFRAME | WS_MAXIMIZEBOX);\n",[33,321,322,327],{"__ignoreMap":31},[36,323,324],{"class":38,"line":39},[36,325,326],{},"\u002F\u002F 为窗口添加可缩放边框和最大化按钮\n",[36,328,329],{"class":38,"line":45},[36,330,331],{},"set_style(win, get_style(win) | WS_THICKFRAME | WS_MAXIMIZEBOX);\n",[333,334],"hr",{},[14,336,337],{"id":337},"控件参考",[22,339,340],{"id":340},"按钮",[26,342,344],{"className":28,"code":343,"language":30,"meta":31,"style":31},"HWND create_button(HWND parent, const WCHAR *text, int x, int y, int w, int h);\nvoid on_button_click(HWND btn, void (*callback)(void *), void *data);\n",[33,345,346,351],{"__ignoreMap":31},[36,347,348],{"class":38,"line":39},[36,349,350],{},"HWND create_button(HWND parent, const WCHAR *text, int x, int y, int w, int h);\n",[36,352,353],{"class":38,"line":45},[36,354,355],{},"void on_button_click(HWND btn, void (*callback)(void *), void *data);\n",[18,357,358,359,362],{},"创建一个按钮，通过 ",[33,360,361],{},"on_button_click"," 注册点击事件回调。",[26,364,366],{"className":28,"code":365,"language":30,"meta":31,"style":31},"void btn_click(void *data) {\n    set_text(label, L\"按钮被点击\");\n}\nHWND btn = create_button(win, L\"点击我\", 10, 10, 100, 30);\non_button_click(btn, btn_click, NULL);\n",[33,367,368,373,378,383,388],{"__ignoreMap":31},[36,369,370],{"class":38,"line":39},[36,371,372],{},"void btn_click(void *data) {\n",[36,374,375],{"class":38,"line":45},[36,376,377],{},"    set_text(label, L\"按钮被点击\");\n",[36,379,380],{"class":38,"line":100},[36,381,382],{},"}\n",[36,384,385],{"class":38,"line":258},[36,386,387],{},"HWND btn = create_button(win, L\"点击我\", 10, 10, 100, 30);\n",[36,389,391],{"class":38,"line":390},5,[36,392,393],{},"on_button_click(btn, btn_click, NULL);\n",[333,395],{},[22,397,398],{"id":398},"标签",[26,400,402],{"className":28,"code":401,"language":30,"meta":31,"style":31},"HWND create_label(HWND parent, const WCHAR *text, int x, int y, int w, int h);\n",[33,403,404],{"__ignoreMap":31},[36,405,406],{"class":38,"line":39},[36,407,401],{},[18,409,410],{},"创建一个标签（静态文本），用于显示文字。",[53,412,413,420,445],{},[18,414,415,419],{},[416,417,418],"strong",{},"提示："," C 语言中，相邻的字符串字面量会被自动拼接。多行文本可以拆成多行写，提高可读性：",[26,421,423],{"className":28,"code":422,"language":30,"meta":31,"style":31},"create_label(win, L\"第一行\\n\"\n                  L\"第二行\\n\"\n                  L\"第三行\",\n             10, 40, 200, 80);\n",[33,424,425,430,435,440],{"__ignoreMap":31},[36,426,427],{"class":38,"line":39},[36,428,429],{},"create_label(win, L\"第一行\\n\"\n",[36,431,432],{"class":38,"line":45},[36,433,434],{},"                  L\"第二行\\n\"\n",[36,436,437],{"class":38,"line":100},[36,438,439],{},"                  L\"第三行\",\n",[36,441,442],{"class":38,"line":258},[36,443,444],{},"             10, 40, 200, 80);\n",[18,446,447,448,451,452,455],{},"编译器会自动合并为 ",[33,449,450],{},"L\"第一行\\n第二行\\n第三行\"","。这个技巧适用于所有接受 ",[33,453,454],{},"const WCHAR *"," 参数的函数。",[26,457,459],{"className":28,"code":458,"language":30,"meta":31,"style":31},"HWND label = create_label(win, L\"用户名：\", 10, 40, 200, 24);\nset_text(label, L\"新文字\");\n",[33,460,461,466],{"__ignoreMap":31},[36,462,463],{"class":38,"line":39},[36,464,465],{},"HWND label = create_label(win, L\"用户名：\", 10, 40, 200, 24);\n",[36,467,468],{"class":38,"line":45},[36,469,470],{},"set_text(label, L\"新文字\");\n",[333,472],{},[22,474,475],{"id":475},"文本框",[26,477,479],{"className":28,"code":478,"language":30,"meta":31,"style":31},"HWND create_text(HWND parent, const WCHAR *text, int x, int y, int w, int h);\n",[33,480,481],{"__ignoreMap":31},[36,482,483],{"class":38,"line":39},[36,484,478],{},[18,486,487,488,491,492,271,495,497],{},"创建一个单行文本框，",[33,489,490],{},"text"," 为初始文本。可通过 ",[33,493,494],{},"set_text",[33,496,59],{}," 读写内容。",[333,499],{},[22,501,502],{"id":502},"多行文本",[26,504,506],{"className":28,"code":505,"language":30,"meta":31,"style":31},"HWND create_textarea(HWND parent, const WCHAR *text, int x, int y, int w, int h);\n",[33,507,508],{"__ignoreMap":31},[36,509,510],{"class":38,"line":39},[36,511,505],{},[18,513,514,515,271,517,497],{},"创建一个多行文本输入框，带垂直滚动条，支持换行和中文。可通过 ",[33,516,494],{},[33,518,59],{},[333,520],{},[22,522,523],{"id":523},"密码框",[26,525,527],{"className":28,"code":526,"language":30,"meta":31,"style":31},"HWND create_password(HWND parent, int x, int y, int w, int h);\n",[33,528,529],{"__ignoreMap":31},[36,530,531],{"class":38,"line":39},[36,532,526],{},[18,534,535,536,271,538,540],{},"创建一个密码输入框，输入内容显示为黑点（•）。可通过 ",[33,537,494],{},[33,539,59],{}," 读写密码文本。",[333,542],{},[22,544,545],{"id":545},"复选框",[26,547,549],{"className":28,"code":548,"language":30,"meta":31,"style":31},"HWND create_checkbox(HWND parent, const WCHAR *text, int x, int y, int w, int h);\nint is_checked(HWND hwnd);\nvoid set_checked(HWND hwnd, int checked);\n",[33,550,551,556,561],{"__ignoreMap":31},[36,552,553],{"class":38,"line":39},[36,554,555],{},"HWND create_checkbox(HWND parent, const WCHAR *text, int x, int y, int w, int h);\n",[36,557,558],{"class":38,"line":45},[36,559,560],{},"int is_checked(HWND hwnd);\n",[36,562,563],{"class":38,"line":100},[36,564,565],{},"void set_checked(HWND hwnd, int checked);\n",[18,567,568,569,572,573,576,577,580],{},"创建一个复选框。点击时自动切换选中\u002F未选状态。",[33,570,571],{},"is_checked"," 返回 1 表示已选中；",[33,574,575],{},"set_checked(1)"," 设选中，",[33,578,579],{},"set_checked(0)"," 取消。",[333,582],{},[22,584,585],{"id":585},"单选按钮",[26,587,589],{"className":28,"code":588,"language":30,"meta":31,"style":31},"HWND create_radio(HWND parent, const WCHAR *text, int x, int y, int w, int h);\nint is_checked(HWND hwnd);\nvoid set_checked(HWND hwnd, int checked);\n",[33,590,591,596,600],{"__ignoreMap":31},[36,592,593],{"class":38,"line":39},[36,594,595],{},"HWND create_radio(HWND parent, const WCHAR *text, int x, int y, int w, int h);\n",[36,597,598],{"class":38,"line":45},[36,599,560],{},[36,601,602],{"class":38,"line":100},[36,603,565],{},[18,605,606,607,609,610,613],{},"创建一个单选按钮。同一父窗口下的单选按钮自动互斥。通过 ",[33,608,571],{}," 和 ",[33,611,612],{},"set_checked"," 读取\u002F设定状态。",[333,615],{},[22,617,618],{"id":618},"分组框",[26,620,622],{"className":28,"code":621,"language":30,"meta":31,"style":31},"HWND create_groupbox(HWND parent, const WCHAR *text, int x, int y, int w, int h);\n",[33,623,624],{"__ignoreMap":31},[36,625,626],{"class":38,"line":39},[36,627,621],{},[18,629,630],{},"创建一个分组框（视觉框线 + 标题），常用来包裹按钮、单选等控件。",[333,632],{},[22,634,635],{"id":635},"下拉框",[26,637,639],{"className":28,"code":638,"language":30,"meta":31,"style":31},"HWND create_combobox(HWND parent, int x, int y, int w, int h);\nvoid combobox_add_text(HWND combobox, const WCHAR *text);\nint combobox_selected_index(HWND combobox);\nconst WCHAR *combobox_selected_text(HWND combobox);\n",[33,640,641,646,651,656],{"__ignoreMap":31},[36,642,643],{"class":38,"line":39},[36,644,645],{},"HWND create_combobox(HWND parent, int x, int y, int w, int h);\n",[36,647,648],{"class":38,"line":45},[36,649,650],{},"void combobox_add_text(HWND combobox, const WCHAR *text);\n",[36,652,653],{"class":38,"line":100},[36,654,655],{},"int combobox_selected_index(HWND combobox);\n",[36,657,658],{"class":38,"line":258},[36,659,660],{},"const WCHAR *combobox_selected_text(HWND combobox);\n",[18,662,663,664,667,668,671,672,675],{},"创建一个下拉选择框（不可编辑）。",[33,665,666],{},"combobox_add_text"," 添加选项；",[33,669,670],{},"combobox_selected_index"," 返回选中索引（-1 表示未选中）；",[33,673,674],{},"combobox_selected_text"," 返回选中项的文本。",[333,677],{},[22,679,680],{"id":680},"列表框",[26,682,684],{"className":28,"code":683,"language":30,"meta":31,"style":31},"HWND create_listbox(HWND parent, int x, int y, int w, int h);\nvoid listbox_add_text(HWND listbox, const WCHAR *text);\nint listbox_selected_index(HWND listbox);\nint listbox_count(HWND listbox);\nconst WCHAR *listbox_selected_text(HWND listbox);\n",[33,685,686,691,696,701,706],{"__ignoreMap":31},[36,687,688],{"class":38,"line":39},[36,689,690],{},"HWND create_listbox(HWND parent, int x, int y, int w, int h);\n",[36,692,693],{"class":38,"line":45},[36,694,695],{},"void listbox_add_text(HWND listbox, const WCHAR *text);\n",[36,697,698],{"class":38,"line":100},[36,699,700],{},"int listbox_selected_index(HWND listbox);\n",[36,702,703],{"class":38,"line":258},[36,704,705],{},"int listbox_count(HWND listbox);\n",[36,707,708],{"class":38,"line":390},[36,709,710],{},"const WCHAR *listbox_selected_text(HWND listbox);\n",[18,712,713,714,667,717,720,721,724,725,675],{},"创建一个列表框。",[33,715,716],{},"listbox_add_text",[33,718,719],{},"listbox_selected_index"," 返回选中索引；",[33,722,723],{},"listbox_count"," 返回总项数；",[33,726,727],{},"listbox_selected_text",[333,729],{},[22,731,732],{"id":732},"进度条",[26,734,736],{"className":28,"code":735,"language":30,"meta":31,"style":31},"HWND create_progressbar(HWND parent, int x, int y, int w, int h);\nvoid set_progress(HWND progress, int value);\n",[33,737,738,743],{"__ignoreMap":31},[36,739,740],{"class":38,"line":39},[36,741,742],{},"HWND create_progressbar(HWND parent, int x, int y, int w, int h);\n",[36,744,745],{"class":38,"line":45},[36,746,747],{},"void set_progress(HWND progress, int value);\n",[18,749,750,751,754],{},"创建一个进度条，默认范围 0–100，",[33,752,753],{},"set_progress"," 设定当前进度值。",[333,756],{},[22,758,759],{"id":759},"滑块",[26,761,763],{"className":28,"code":762,"language":30,"meta":31,"style":31},"HWND create_slider(HWND parent, int x, int y, int w, int h);\nint slider_get_pos(HWND slider);\nvoid slider_set_pos(HWND slider, int value);\n",[33,764,765,770,775],{"__ignoreMap":31},[36,766,767],{"class":38,"line":39},[36,768,769],{},"HWND create_slider(HWND parent, int x, int y, int w, int h);\n",[36,771,772],{"class":38,"line":45},[36,773,774],{},"int slider_get_pos(HWND slider);\n",[36,776,777],{"class":38,"line":100},[36,778,779],{},"void slider_set_pos(HWND slider, int value);\n",[18,781,782,783,786,787,790],{},"创建一个滑块（带刻度线），默认范围 0–100。",[33,784,785],{},"slider_get_pos"," 读取位置，",[33,788,789],{},"slider_set_pos"," 设定位置。",[333,792],{},[22,794,795],{"id":795},"滚动条",[26,797,799],{"className":28,"code":798,"language":30,"meta":31,"style":31},"HWND create_scrollbar(HWND parent, int x, int y, int w, int h);\nint scrollbar_get_pos(HWND scrollbar);\nvoid scrollbar_set_pos(HWND scrollbar, int pos);\n",[33,800,801,806,811],{"__ignoreMap":31},[36,802,803],{"class":38,"line":39},[36,804,805],{},"HWND create_scrollbar(HWND parent, int x, int y, int w, int h);\n",[36,807,808],{"class":38,"line":45},[36,809,810],{},"int scrollbar_get_pos(HWND scrollbar);\n",[36,812,813],{"class":38,"line":100},[36,814,815],{},"void scrollbar_set_pos(HWND scrollbar, int pos);\n",[18,817,818,819,271,822,825],{},"创建一个滚动条。根据宽高比自动决定水平或垂直（宽 > 高为水平，高 > 宽为垂直）。",[33,820,821],{},"scrollbar_get_pos",[33,823,824],{},"scrollbar_set_pos"," 读取\u002F设定位置。",[333,827],{},[22,829,830],{"id":830},"数值调节",[26,832,834],{"className":28,"code":833,"language":30,"meta":31,"style":31},"HWND create_spin(HWND parent, int x, int y, int w, int h);\nvoid spin_set_range(HWND spin, int min, int max);\nint spin_get_pos(HWND spin);\n",[33,835,836,841,846],{"__ignoreMap":31},[36,837,838],{"class":38,"line":39},[36,839,840],{},"HWND create_spin(HWND parent, int x, int y, int w, int h);\n",[36,842,843],{"class":38,"line":45},[36,844,845],{},"void spin_set_range(HWND spin, int min, int max);\n",[36,847,848],{"class":38,"line":100},[36,849,850],{},"int spin_get_pos(HWND spin);\n",[18,852,853,854,857,858,861],{},"创建一个数值调节按钮（Spin\u002FUp-Down）。自动绑定前面的编辑框作为伙伴。",[33,855,856],{},"spin_set_range"," 设定范围，",[33,859,860],{},"spin_get_pos"," 读取当前数值。",[333,863],{},[22,865,866],{"id":866},"状态栏",[26,868,870],{"className":28,"code":869,"language":30,"meta":31,"style":31},"HWND create_statusbar(HWND parent);\nvoid statusbar_set_text(HWND statusbar, const WCHAR *text);\n",[33,871,872,877],{"__ignoreMap":31},[36,873,874],{"class":38,"line":39},[36,875,876],{},"HWND create_statusbar(HWND parent);\n",[36,878,879],{"class":38,"line":45},[36,880,881],{},"void statusbar_set_text(HWND statusbar, const WCHAR *text);\n",[18,883,884,885,888],{},"创建一个底部状态栏，自动吸附在窗口底部。",[33,886,887],{},"statusbar_set_text"," 设置显示文本。",[26,890,892],{"className":28,"code":891,"language":30,"meta":31,"style":31},"HWND sb = create_statusbar(win);\nstatusbar_set_text(sb, L\"就绪\");\n",[33,893,894,899],{"__ignoreMap":31},[36,895,896],{"class":38,"line":39},[36,897,898],{},"HWND sb = create_statusbar(win);\n",[36,900,901],{"class":38,"line":45},[36,902,903],{},"statusbar_set_text(sb, L\"就绪\");\n",[333,905],{},[22,907,908],{"id":908},"工具栏",[26,910,912],{"className":28,"code":911,"language":30,"meta":31,"style":31},"HWND create_toolbar(HWND parent);\nvoid toolbar_add_button(HWND toolbar, const WCHAR *text);\n",[33,913,914,919],{"__ignoreMap":31},[36,915,916],{"class":38,"line":39},[36,917,918],{},"HWND create_toolbar(HWND parent);\n",[36,920,921],{"class":38,"line":45},[36,922,923],{},"void toolbar_add_button(HWND toolbar, const WCHAR *text);\n",[18,925,926,927,930],{},"创建一个顶部工具栏。",[33,928,929],{},"toolbar_add_button"," 添加文字按钮。",[333,932],{},[22,934,935],{"id":935},"树状列表",[26,937,939],{"className":28,"code":938,"language":30,"meta":31,"style":31},"HWND create_treeview(HWND parent, int x, int y, int w, int h);\nHWND treeview_add_text(HWND treeview, const WCHAR *text);\nHWND treeview_add_child(HWND treeview, HWND parent_item, const WCHAR *text);\nHWND treeview_selected(HWND treeview);\nconst WCHAR *treeview_selected_text(HWND treeview);\nvoid treeview_delete(HWND treeview, HWND item);\nvoid treeview_set_text(HWND treeview, HWND item, const WCHAR *text);\nvoid treeview_expand(HWND treeview, HWND item);\nvoid treeview_collapse(HWND treeview, HWND item);\n",[33,940,941,946,951,956,961,966,972,978,984],{"__ignoreMap":31},[36,942,943],{"class":38,"line":39},[36,944,945],{},"HWND create_treeview(HWND parent, int x, int y, int w, int h);\n",[36,947,948],{"class":38,"line":45},[36,949,950],{},"HWND treeview_add_text(HWND treeview, const WCHAR *text);\n",[36,952,953],{"class":38,"line":100},[36,954,955],{},"HWND treeview_add_child(HWND treeview, HWND parent_item, const WCHAR *text);\n",[36,957,958],{"class":38,"line":258},[36,959,960],{},"HWND treeview_selected(HWND treeview);\n",[36,962,963],{"class":38,"line":390},[36,964,965],{},"const WCHAR *treeview_selected_text(HWND treeview);\n",[36,967,969],{"class":38,"line":968},6,[36,970,971],{},"void treeview_delete(HWND treeview, HWND item);\n",[36,973,975],{"class":38,"line":974},7,[36,976,977],{},"void treeview_set_text(HWND treeview, HWND item, const WCHAR *text);\n",[36,979,981],{"class":38,"line":980},8,[36,982,983],{},"void treeview_expand(HWND treeview, HWND item);\n",[36,985,987],{"class":38,"line":986},9,[36,988,989],{},"void treeview_collapse(HWND treeview, HWND item);\n",[18,991,992],{},"创建一个树状列表视图。",[263,994,995,1001,1007,1016,1022,1028,1034],{},[266,996,997,1000],{},[33,998,999],{},"treeview_add_text"," 添加根节点，返回节点句柄",[266,1002,1003,1006],{},[33,1004,1005],{},"treeview_add_child"," 在指定父节点下添加子节点，返回节点句柄",[266,1008,1009,1012,1013,1015],{},[33,1010,1011],{},"treeview_selected"," 返回当前选中节点句柄（",[33,1014,211],{}," 表示无选中）",[266,1017,1018,1021],{},[33,1019,1020],{},"treeview_selected_text"," 返回当前选中节点的文本",[266,1023,1024,1027],{},[33,1025,1026],{},"treeview_delete"," 删除指定节点及其所有子节点",[266,1029,1030,1033],{},[33,1031,1032],{},"treeview_set_text"," 修改指定节点的显示文本",[266,1035,1036,271,1039,1042],{},[33,1037,1038],{},"treeview_expand",[33,1040,1041],{},"treeview_collapse"," 展开\u002F折叠指定节点",[26,1044,1046],{"className":28,"code":1045,"language":30,"meta":31,"style":31},"HWND root  = treeview_add_text(tree, L\"中国\");\nHWND city1 = treeview_add_child(tree, root, L\"北京\");\nHWND city2 = treeview_add_child(tree, root, L\"上海\");\ntreeview_expand(tree, root);\n",[33,1047,1048,1053,1058,1063],{"__ignoreMap":31},[36,1049,1050],{"class":38,"line":39},[36,1051,1052],{},"HWND root  = treeview_add_text(tree, L\"中国\");\n",[36,1054,1055],{"class":38,"line":45},[36,1056,1057],{},"HWND city1 = treeview_add_child(tree, root, L\"北京\");\n",[36,1059,1060],{"class":38,"line":100},[36,1061,1062],{},"HWND city2 = treeview_add_child(tree, root, L\"上海\");\n",[36,1064,1065],{"class":38,"line":258},[36,1066,1067],{},"treeview_expand(tree, root);\n",[333,1069],{},[22,1071,1072],{"id":1072},"详细列表",[26,1074,1076],{"className":28,"code":1075,"language":30,"meta":31,"style":31},"HWND create_listview(HWND parent, int x, int y, int w, int h);\nvoid listview_add_column(HWND listview, const WCHAR *text, int width);\nHWND listview_add_text(HWND listview, const WCHAR *text);\nvoid listview_set_text(HWND listview, int row, int col, const WCHAR *text);\nint listview_count(HWND listview);\nint listview_selected_index(HWND listview);\n",[33,1077,1078,1083,1088,1093,1098,1103],{"__ignoreMap":31},[36,1079,1080],{"class":38,"line":39},[36,1081,1082],{},"HWND create_listview(HWND parent, int x, int y, int w, int h);\n",[36,1084,1085],{"class":38,"line":45},[36,1086,1087],{},"void listview_add_column(HWND listview, const WCHAR *text, int width);\n",[36,1089,1090],{"class":38,"line":100},[36,1091,1092],{},"HWND listview_add_text(HWND listview, const WCHAR *text);\n",[36,1094,1095],{"class":38,"line":258},[36,1096,1097],{},"void listview_set_text(HWND listview, int row, int col, const WCHAR *text);\n",[36,1099,1100],{"class":38,"line":390},[36,1101,1102],{},"int listview_count(HWND listview);\n",[36,1104,1105],{"class":38,"line":968},[36,1106,1107],{},"int listview_selected_index(HWND listview);\n",[18,1109,1110,1111,1114,1115,1118],{},"创建一个详细列表视图（报表模式）。先 ",[33,1112,1113],{},"listview_add_column"," 添加列（指定列名和宽度），再 ",[33,1116,1117],{},"listview_add_text"," 添加行。",[18,1120,1121,1124],{},[33,1122,1123],{},"listview_set_text"," 设置指定行列的文本，用于在多列模式下填充第 2 列及之后的列：",[26,1126,1128],{"className":28,"code":1127,"language":30,"meta":31,"style":31},"listview_add_text(listview, L\"北京\");                    \u002F\u002F 第 0 列（姓名）\nlistview_set_text(listview, 0, 1, L\"beijing@test.com\");  \u002F\u002F 第 1 列（邮箱）\nlistview_set_text(listview, 0, 2, L\"010-1234\");          \u002F\u002F 第 2 列（电话）\n",[33,1129,1130,1135,1140],{"__ignoreMap":31},[36,1131,1132],{"class":38,"line":39},[36,1133,1134],{},"listview_add_text(listview, L\"北京\");                    \u002F\u002F 第 0 列（姓名）\n",[36,1136,1137],{"class":38,"line":45},[36,1138,1139],{},"listview_set_text(listview, 0, 1, L\"beijing@test.com\");  \u002F\u002F 第 1 列（邮箱）\n",[36,1141,1142],{"class":38,"line":100},[36,1143,1144],{},"listview_set_text(listview, 0, 2, L\"010-1234\");          \u002F\u002F 第 2 列（电话）\n",[18,1146,1147,1150,1151,1154],{},[33,1148,1149],{},"listview_count"," 返回当前总行数，",[33,1152,1153],{},"listview_selected_index"," 返回选中行的索引（-1 表示未选中）。",[26,1156,1158],{"className":28,"code":1157,"language":30,"meta":31,"style":31},"void listview_delete_all(HWND listview);\n",[33,1159,1160],{"__ignoreMap":31},[36,1161,1162],{"class":38,"line":39},[36,1163,1157],{},[18,1165,1166],{},"清空列表视图的所有行。",[26,1168,1170],{"className":28,"code":1169,"language":30,"meta":31,"style":31},"void listview_get_text(HWND listview, int row, int col, WCHAR *buf, int size);\n",[33,1171,1172],{"__ignoreMap":31},[36,1173,1174],{"class":38,"line":39},[36,1175,1169],{},[18,1177,1178],{},"读取列表视图指定行列的文本到缓冲区。常用于获取选中行的某列数据（如 PID）。",[26,1180,1182],{"className":28,"code":1181,"language":30,"meta":31,"style":31},"void on_listview_dblclick(HWND listview, void (*callback)(void *), void *data);\n",[33,1183,1184],{"__ignoreMap":31},[36,1185,1186],{"class":38,"line":39},[36,1187,1181],{},[18,1189,1190,1191,1193],{},"注册列表视图的双击回调。双击某行时触发，配合 ",[33,1192,1153],{}," 获取被双击的行。",[333,1195],{},[22,1197,1198],{"id":1198},"标签页",[26,1200,1202],{"className":28,"code":1201,"language":30,"meta":31,"style":31},"HWND create_tabbar(HWND parent, int x, int y, int w, int h);\nvoid tabbar_add_text(HWND tabbar, const WCHAR *text);\nint tabbar_selected_index(HWND tabbar);\nvoid on_tabbar_select(HWND tabbar, void (*callback)(void *), void *data);\n",[33,1203,1204,1209,1214,1219],{"__ignoreMap":31},[36,1205,1206],{"class":38,"line":39},[36,1207,1208],{},"HWND create_tabbar(HWND parent, int x, int y, int w, int h);\n",[36,1210,1211],{"class":38,"line":45},[36,1212,1213],{},"void tabbar_add_text(HWND tabbar, const WCHAR *text);\n",[36,1215,1216],{"class":38,"line":100},[36,1217,1218],{},"int tabbar_selected_index(HWND tabbar);\n",[36,1220,1221],{"class":38,"line":258},[36,1222,1223],{},"void on_tabbar_select(HWND tabbar, void (*callback)(void *), void *data);\n",[18,1225,1226,1227,1230,1231,1234],{},"创建一个标签页控件。",[33,1228,1229],{},"tabbar_add_text"," 添加标签页，",[33,1232,1233],{},"tabbar_selected_index"," 返回当前选中标签的索引。",[18,1236,1237,1240,1241,1243],{},[33,1238,1239],{},"on_tabbar_select"," 注册标签切换回调。用户点击不同标签页时触发，回调中通过 ",[33,1242,1233],{}," 获取当前选中索引。",[26,1245,1247],{"className":28,"code":1246,"language":30,"meta":31,"style":31},"void on_tab_changed(void *d) {\n    int idx = tabbar_selected_index(g_tab);\n    \u002F\u002F 切换到 idx 对应的面板\n}\non_tabbar_select(g_tab, on_tab_changed, NULL);\n",[33,1248,1249,1254,1259,1264,1268],{"__ignoreMap":31},[36,1250,1251],{"class":38,"line":39},[36,1252,1253],{},"void on_tab_changed(void *d) {\n",[36,1255,1256],{"class":38,"line":45},[36,1257,1258],{},"    int idx = tabbar_selected_index(g_tab);\n",[36,1260,1261],{"class":38,"line":100},[36,1262,1263],{},"    \u002F\u002F 切换到 idx 对应的面板\n",[36,1265,1266],{"class":38,"line":258},[36,1267,382],{},[36,1269,1270],{"class":38,"line":390},[36,1271,1272],{},"on_tabbar_select(g_tab, on_tab_changed, NULL);\n",[333,1274],{},[22,1276,1277],{"id":1277},"日期选择",[26,1279,1281],{"className":28,"code":1280,"language":30,"meta":31,"style":31},"HWND create_datepicker(HWND parent, int x, int y, int w, int h);\n",[33,1282,1283],{"__ignoreMap":31},[36,1284,1285],{"class":38,"line":39},[36,1286,1280],{},[18,1288,1289],{},"创建一个日期选择器。",[333,1291],{},[22,1293,1295],{"id":1294},"ip-输入","IP 输入",[26,1297,1299],{"className":28,"code":1298,"language":30,"meta":31,"style":31},"HWND create_ip_input(HWND parent, int x, int y, int w, int h);\nvoid get_ip(HWND ip_input, int ip[4]);\nvoid set_ip(HWND ip_input, int a, int b, int c, int d);\n",[33,1300,1301,1306,1311],{"__ignoreMap":31},[36,1302,1303],{"class":38,"line":39},[36,1304,1305],{},"HWND create_ip_input(HWND parent, int x, int y, int w, int h);\n",[36,1307,1308],{"class":38,"line":45},[36,1309,1310],{},"void get_ip(HWND ip_input, int ip[4]);\n",[36,1312,1313],{"class":38,"line":100},[36,1314,1315],{},"void set_ip(HWND ip_input, int a, int b, int c, int d);\n",[18,1317,1318,1319,1322,1323,1326],{},"创建一个 IP 地址输入控件（4 段式）。",[33,1320,1321],{},"get_ip"," 获取 4 个段，",[33,1324,1325],{},"set_ip"," 设置 IP 地址。",[333,1328],{},[22,1330,1331],{"id":1331},"动画",[26,1333,1335],{"className":28,"code":1334,"language":30,"meta":31,"style":31},"HWND create_animation(HWND parent, int x, int y, int w, int h);\nvoid play_animation(HWND anim, int res_id);\n",[33,1336,1337,1342],{"__ignoreMap":31},[36,1338,1339],{"class":38,"line":39},[36,1340,1341],{},"HWND create_animation(HWND parent, int x, int y, int w, int h);\n",[36,1343,1344],{"class":38,"line":45},[36,1345,1346],{},"void play_animation(HWND anim, int res_id);\n",[18,1348,1349,1350,1353],{},"创建一个 AVI 动画控件。",[33,1351,1352],{},"play_animation"," 播放资源中指定 ID 的 AVI 文件。",[333,1355],{},[22,1357,1358],{"id":1358},"富文本",[26,1360,1362],{"className":28,"code":1361,"language":30,"meta":31,"style":31},"HWND create_richedit(HWND parent, int x, int y, int w, int h);\n",[33,1363,1364],{"__ignoreMap":31},[36,1365,1366],{"class":38,"line":39},[36,1367,1361],{},[18,1369,1370,1371,271,1373,497],{},"创建一个富文本编辑框，支持多行文本、中文和换行。可通过 ",[33,1372,494],{},[33,1374,59],{},[333,1376],{},[22,1378,1380],{"id":1379},"日志面板logview","日志面板（LogView）",[18,1382,1383],{},"基于 ListView 的自定义日志面板组件。三列：时间 | 级别 | 消息，自动管理行数上限，新日志自动滚底。",[26,1385,1387],{"className":28,"code":1386,"language":30,"meta":31,"style":31},"HWND create_logview(HWND parent, int x, int y, int w, int h);\n",[33,1388,1389],{"__ignoreMap":31},[36,1390,1391],{"class":38,"line":39},[36,1392,1386],{},[18,1394,1395,1396,1399],{},"创建日志面板。返回 ListView 句柄，后续 ",[33,1397,1398],{},"logview_info\u002Fwarn\u002Ferror"," 通过该句柄写入日志。",[26,1401,1403],{"className":28,"code":1402,"language":30,"meta":31,"style":31},"void logview_info(HWND hwnd, const WCHAR *fmt, ...);\nvoid logview_warn(HWND hwnd, const WCHAR *fmt, ...);\nvoid logview_error(HWND hwnd, const WCHAR *fmt, ...);\n",[33,1404,1405,1410,1415],{"__ignoreMap":31},[36,1406,1407],{"class":38,"line":39},[36,1408,1409],{},"void logview_info(HWND hwnd, const WCHAR *fmt, ...);\n",[36,1411,1412],{"class":38,"line":45},[36,1413,1414],{},"void logview_warn(HWND hwnd, const WCHAR *fmt, ...);\n",[36,1416,1417],{"class":38,"line":100},[36,1418,1419],{},"void logview_error(HWND hwnd, const WCHAR *fmt, ...);\n",[18,1421,1422,1423,1426,1427,271,1430,271,1433,1436],{},"添加日志行，支持 ",[33,1424,1425],{},"printf"," 风格变参格式化。自动附加时间戳，分别标记为 ",[33,1428,1429],{},"INFO",[33,1431,1432],{},"WARN",[33,1434,1435],{},"ERROR","。",[26,1438,1440],{"className":28,"code":1439,"language":30,"meta":31,"style":31},"void logview_clear(HWND hwnd);\n",[33,1441,1442],{"__ignoreMap":31},[36,1443,1444],{"class":38,"line":39},[36,1445,1439],{},[18,1447,1448],{},"清空面板所有日志行。",[26,1450,1452],{"className":28,"code":1451,"language":30,"meta":31,"style":31},"void logview_set_max_rows(HWND hwnd, int max_rows);\n",[33,1453,1454],{"__ignoreMap":31},[36,1455,1456],{"class":38,"line":39},[36,1457,1451],{},[18,1459,1460],{},"设置最大行数（默认 500）。超出时自动删除最旧行。",[26,1462,1464],{"className":28,"code":1463,"language":30,"meta":31,"style":31},"HWND lv = create_logview(win, 860, 10, 330, 780);\nlogview_info(lv, L\"应用已启动，端口 %d\", 9099);\nlogview_warn(lv, L\"连接超时 (conn_id=%d)\", 5);\nlogview_error(lv, L\"无效 JSON: %s\", raw);\n",[33,1465,1466,1471,1476,1481],{"__ignoreMap":31},[36,1467,1468],{"class":38,"line":39},[36,1469,1470],{},"HWND lv = create_logview(win, 860, 10, 330, 780);\n",[36,1472,1473],{"class":38,"line":45},[36,1474,1475],{},"logview_info(lv, L\"应用已启动，端口 %d\", 9099);\n",[36,1477,1478],{"class":38,"line":100},[36,1479,1480],{},"logview_warn(lv, L\"连接超时 (conn_id=%d)\", 5);\n",[36,1482,1483],{"class":38,"line":258},[36,1484,1485],{},"logview_error(lv, L\"无效 JSON: %s\", raw);\n",[53,1487,1488],{},[18,1489,1490,1493,1494,1497,1498,1501],{},[416,1491,1492],{},"注意："," LogView 在非 GUI 线程（如后台工作线程）中调用 ",[33,1495,1496],{},"logview_info"," 等函数是安全的。但创建 ",[33,1499,1500],{},"create_logview"," 必须在 GUI 线程中执行。",[333,1503],{},[14,1505,1506],{"id":1506},"对话框",[22,1508,1509],{"id":1509},"打开文件对话框",[26,1511,1513],{"className":28,"code":1512,"language":30,"meta":31,"style":31},"int open_file_dialog(HWND parent, WCHAR *buf, int size, const WCHAR *filter);\n",[33,1514,1515],{"__ignoreMap":31},[36,1516,1517],{"class":38,"line":39},[36,1518,1512],{},[18,1520,1521,1522,1525,1526,1529,1530,1533,1534,1537],{},"弹出打开文件对话框。",[33,1523,1524],{},"buf"," 接收选中文件的完整路径；",[33,1527,1528],{},"filter"," 为筛选器字符串，格式如 ",[33,1531,1532],{},"L\"文本文件\\0*.txt\\0所有文件\\0*.*\\0\"","（注意用 ",[33,1535,1536],{},"\\0"," 分隔）。成功返回 1，取消返回 0。",[22,1539,1540],{"id":1540},"保存文件对话框",[26,1542,1544],{"className":28,"code":1543,"language":30,"meta":31,"style":31},"int save_file_dialog(HWND parent, WCHAR *buf, int size, const WCHAR *filter);\n",[33,1545,1546],{"__ignoreMap":31},[36,1547,1548],{"class":38,"line":39},[36,1549,1543],{},[18,1551,1552,1553,1556],{},"弹出保存文件对话框。参数含义同 ",[33,1554,1555],{},"open_file_dialog","，已选择的文件会提示覆盖确认。",[22,1558,1559],{"id":1559},"浏览目录对话框",[26,1561,1563],{"className":28,"code":1562,"language":30,"meta":31,"style":31},"int browse_folder_dialog(HWND parent, WCHAR *buf, int size);\n",[33,1564,1565],{"__ignoreMap":31},[36,1566,1567],{"class":38,"line":39},[36,1568,1562],{},[18,1570,1571,1572,1574],{},"弹出选择目录对话框。",[33,1573,1524],{}," 接收选中目录的完整路径。成功返回 1，取消返回 0。",[333,1576],{},[14,1578,1579],{"id":1579},"消息框",[22,1581,1582],{"id":1582},"alert",[26,1584,1586],{"className":28,"code":1585,"language":30,"meta":31,"style":31},"void alert(const WCHAR *title, const WCHAR *message);\n",[33,1587,1588],{"__ignoreMap":31},[36,1589,1590],{"class":38,"line":39},[36,1591,1585],{},[18,1593,1594],{},"弹出仅含\"确定\"按钮的消息框。",[22,1596,1597],{"id":1597},"confirm",[26,1599,1601],{"className":28,"code":1600,"language":30,"meta":31,"style":31},"int confirm(const WCHAR *title, const WCHAR *message);\n",[33,1602,1603],{"__ignoreMap":31},[36,1604,1605],{"class":38,"line":39},[36,1606,1600],{},[18,1608,1609],{},"弹出\"确定\u002F取消\"对话框，返回 1 表示确定。",[22,1611,1612],{"id":1612},"ask",[26,1614,1616],{"className":28,"code":1615,"language":30,"meta":31,"style":31},"int ask(const WCHAR *title, const WCHAR *message);\n",[33,1617,1618],{"__ignoreMap":31},[36,1619,1620],{"class":38,"line":39},[36,1621,1615],{},[18,1623,1624],{},"弹出\"是\u002F否\"对话框，返回 1 表示是。",[1626,1627,1628],"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":31,"searchDepth":45,"depth":45,"links":1630},[1631,1639,1665,1670],{"id":16,"depth":45,"text":16,"children":1632},[1633,1634,1635,1636,1637,1638],{"id":24,"depth":100,"text":24},{"id":66,"depth":100,"text":66},{"id":106,"depth":100,"text":106},{"id":140,"depth":100,"text":140},{"id":170,"depth":100,"text":170},{"id":235,"depth":100,"text":235},{"id":337,"depth":45,"text":337,"children":1640},[1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664],{"id":340,"depth":100,"text":340},{"id":398,"depth":100,"text":398},{"id":475,"depth":100,"text":475},{"id":502,"depth":100,"text":502},{"id":523,"depth":100,"text":523},{"id":545,"depth":100,"text":545},{"id":585,"depth":100,"text":585},{"id":618,"depth":100,"text":618},{"id":635,"depth":100,"text":635},{"id":680,"depth":100,"text":680},{"id":732,"depth":100,"text":732},{"id":759,"depth":100,"text":759},{"id":795,"depth":100,"text":795},{"id":830,"depth":100,"text":830},{"id":866,"depth":100,"text":866},{"id":908,"depth":100,"text":908},{"id":935,"depth":100,"text":935},{"id":1072,"depth":100,"text":1072},{"id":1198,"depth":100,"text":1198},{"id":1277,"depth":100,"text":1277},{"id":1294,"depth":100,"text":1295},{"id":1331,"depth":100,"text":1331},{"id":1358,"depth":100,"text":1358},{"id":1379,"depth":100,"text":1380},{"id":1506,"depth":45,"text":1506,"children":1666},[1667,1668,1669],{"id":1509,"depth":100,"text":1509},{"id":1540,"depth":100,"text":1540},{"id":1559,"depth":100,"text":1559},{"id":1579,"depth":45,"text":1579,"children":1671},[1672,1673,1674],{"id":1582,"depth":100,"text":1582},{"id":1597,"depth":100,"text":1597},{"id":1612,"depth":100,"text":1612},"md",{},true,"\u002Fdocs\u002Fapi\u002Feduwin-ctrl-api",{"title":5,"description":31},"docs\u002Fapi\u002Feduwin-ctrl-api","74iIFztsCLgfBpAklGWFJscJegR5t0hkbKOpFadIibg",1782488679846]