quickwin 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.en.md +17 -22
  2. package/README.md +1 -3
  3. package/examples/exec_server.js +133 -29
  4. package/examples/exec_server_worker.js +1 -1
  5. package/examples/exec_server_worker.ts +2 -2
  6. package/examples/pdf_preview2.js +1 -1
  7. package/examples/pdf_preview2.ts +1 -1
  8. package/examples/pdf_viewer.js +132 -28
  9. package/examples/pdf_viewer.tsx +1 -1
  10. package/examples/test_gallery.js +131 -27
  11. package/examples/test_react_lazy.js +131 -27
  12. package/examples/test_react_listbox.js +131 -27
  13. package/examples/test_root_window.js +131 -27
  14. package/examples/test_tab.js +131 -27
  15. package/lib/certs.js +13 -8
  16. package/lib/certs.ts +13 -8
  17. package/lib/fetch.js +51 -3
  18. package/lib/fetch.ts +38 -3
  19. package/lib/ffi/bind.js +94 -5
  20. package/lib/ffi/bind.ts +107 -10
  21. package/lib/ffi/ctype.js +33 -7
  22. package/lib/ffi/ctype.ts +48 -10
  23. package/lib/ffi/struct.js +92 -14
  24. package/lib/ffi/struct.ts +108 -19
  25. package/lib/react-qw/components/ListView.js +1 -0
  26. package/lib/react-qw/components/PathPicker.js +2 -2
  27. package/lib/react-qw/index.js +1 -1
  28. package/lib/react-qw/index.ts +4 -1
  29. package/lib/text-measure.js +3 -1
  30. package/lib/text-measure.ts +4 -3
  31. package/lib/websocket.js +32 -2
  32. package/lib/websocket.ts +25 -2
  33. package/lib/windows/advapi32.js +53 -0
  34. package/lib/windows/advapi32.ts +64 -0
  35. package/lib/windows/comctl32.js +15 -15
  36. package/lib/windows/comctl32.ts +15 -16
  37. package/lib/windows/comdlg32.js +3 -2
  38. package/lib/windows/comdlg32.ts +3 -2
  39. package/lib/windows/gdi32.js +328 -26
  40. package/lib/windows/gdi32.ts +349 -26
  41. package/lib/windows/kernel32.js +206 -10
  42. package/lib/windows/kernel32.ts +225 -10
  43. package/lib/windows/msimg32.js +38 -0
  44. package/lib/windows/msimg32.ts +45 -0
  45. package/lib/windows/ntdll.js +3 -2
  46. package/lib/windows/ntdll.ts +3 -2
  47. package/lib/windows/ole32.js +1 -1
  48. package/lib/windows/ole32.ts +1 -1
  49. package/lib/windows/psapi.js +32 -0
  50. package/lib/windows/psapi.ts +37 -0
  51. package/lib/windows/shell32.js +5 -3
  52. package/lib/windows/shell32.ts +5 -3
  53. package/lib/windows/structs.js +135 -0
  54. package/lib/windows/structs.ts +144 -0
  55. package/lib/windows/user32.js +202 -99
  56. package/lib/windows/user32.ts +204 -99
  57. package/lib/windows/version.js +29 -0
  58. package/lib/windows/version.ts +35 -0
  59. package/lib/windows/winspool.js +71 -0
  60. package/lib/windows/winspool.ts +80 -0
  61. package/package.json +1 -1
  62. package/quickwin.d.ts +11 -5
  63. package/quickwin_const.d.ts +136 -0
  64. package/qwin-nowasm-x86.exe +0 -0
  65. package/qwin-nowasm.exe +0 -0
  66. package/qwin-x86.exe +0 -0
  67. package/qwin.exe +0 -0
  68. package/test/run.js +7 -0
  69. package/test/run.ts +7 -0
  70. package/test/test_basic_fetch.js +21 -0
  71. package/test/test_basic_fetch.ts +17 -0
  72. package/test/test_ffi.js +6 -6
  73. package/test/test_ffi.ts +6 -6
  74. package/test/test_ffi_abi.js +55 -0
  75. package/test/test_ffi_abi.ts +56 -0
  76. package/test/test_ffi_array.js +116 -0
  77. package/test/test_ffi_array.ts +141 -0
  78. package/test/test_ffi_bind.js +82 -0
  79. package/test/test_ffi_bind.ts +71 -0
  80. package/test/test_files.js +102 -0
  81. package/test/test_files.ts +121 -0
  82. package/test/test_gdi_draw.js +681 -0
  83. package/test/test_gdi_draw.ts +725 -0
  84. package/test/test_net_fetch.js +4 -3
  85. package/test/test_net_fetch.ts +4 -3
  86. package/test/test_printer.js +137 -0
  87. package/test/test_printer.ts +148 -0
  88. package/test/test_proc.js +141 -0
  89. package/test/test_proc.ts +163 -0
  90. package/test/test_react_complex.js +131 -27
  91. package/test/test_react_counter.js +131 -27
  92. package/test/test_react_flex.js +131 -27
  93. package/test/test_react_hidden.js +131 -27
  94. package/test/test_react_listview_link.js +131 -27
  95. package/test/test_react_notify.js +131 -27
  96. package/test/test_react_render.js +131 -27
  97. package/test/test_registry.js +74 -0
  98. package/test/test_registry.ts +95 -0
  99. package/test/test_sysinfo.js +122 -0
  100. package/test/test_sysinfo.ts +141 -0
  101. package/test/test_wolfssl_read.js +45 -44
  102. package/test/test_wolfssl_read.ts +42 -42
@@ -0,0 +1,64 @@
1
+ // advapi32 绑定(注册表 API;键名/值名一律 W 版 UTF-16)
2
+ import { bind } from '../ffi/bind.js'
3
+
4
+ // dll 名部分应用(工厂转调保泛型 infer,见 lib/windows/user32.ts 头注释)
5
+ const b = <const S extends string>(name: string, sig: S) => bind('advapi32.dll', name, sig)
6
+
7
+ /** 创建/打开子键(子键不存在则创建,含中间层级)
8
+ * @returns 0 = ERROR_SUCCESS
9
+ * @param args_0 hKey 父键:gui.HKey.CURRENT_USER / LOCAL_MACHINE 预定义键,或本族
10
+ * Open/Create 返回的真实句柄(此位双来源,不标 @HKey——裸位收两种)
11
+ * @param args_1 lpSubKey 子键路径('Software\\X\\Y',可 NULL = 打开 hKey 自身副本)
12
+ * @param args_2 Reserved 保留,恒 0
13
+ * @param args_3 lpClass 键类名(一般 NULL)
14
+ * @param args_4 dwOptions 保留属性(恒 0)
15
+ * @param args_5 samDesired 访问掩码 gui.RegAccess.READ / SET_VALUE(标准组合常量按成员收录)
16
+ * @param args_6 lpSecurityAttributes 安全描述符(一般 NULL)
17
+ * @param args_7 phkResult 出参:键句柄(PtrArrayBuffer(8),readPtr 按架构读回)
18
+ * @param args_8 lpdwDisposition 出参:新建/已存在标记(可 NULL) */
19
+ export const RegCreateKeyEx = /*@__PURE__*/ b('RegCreateKeyExW',
20
+ '<>ptr <WCHAR>ptr u32 <WCHAR>ptr u32 u32@RegAccess <>ptr <BYTE>ptr <BYTE>ptr -> i32')
21
+
22
+ /** 打开已有子键(不创建)
23
+ * @returns 0 = ERROR_SUCCESS;2 = ERROR_FILE_NOT_FOUND(子键不存在)
24
+ * @param args_0 hKey 父键(同 RegCreateKeyEx 的双来源语义)
25
+ * @param args_1 lpSubKey 子键路径(NULL = 打开 hKey 自身副本)
26
+ * @param args_2 ulOptions 保留,恒 0
27
+ * @param args_3 samDesired 访问掩码 gui.RegAccess.READ / SET_VALUE
28
+ * @param args_4 phkResult 出参:键句柄 */
29
+ export const RegOpenKeyEx = /*@__PURE__*/ b('RegOpenKeyExW',
30
+ '<>ptr <WCHAR>ptr u32 u32@RegAccess <BYTE>ptr -> i32')
31
+
32
+ /** 关闭键句柄;只关 Open/Create 返回的真实句柄——预定义键(HKEY_CURRENT_USER 等)
33
+ * 不要关
34
+ * @returns 0 = ERROR_SUCCESS */
35
+ export const RegCloseKey = /*@__PURE__*/ b('RegCloseKey', '<>ptr -> i32')
36
+
37
+ /** 写键值
38
+ * @returns 0 = ERROR_SUCCESS
39
+ * @param args_0 hKey 键句柄(须 KEY_SET_VALUE 权限,含于 gui.RegAccess.SET_VALUE)
40
+ * @param args_1 lpValueName 值名(NULL = 键的默认值)
41
+ * @param args_2 Reserved 保留,恒 0
42
+ * @param args_3 dwType 值类型 gui.RegType.SZ(UTF-16 字符串)
43
+ * @param args_4 lpData 数据缓冲(REG_SZ:UTF-16LE 含结尾 NUL)
44
+ * @param args_5 cbData 数据字节数(REG_SZ = (字符数+1)*2) */
45
+ export const RegSetValueEx = /*@__PURE__*/ b('RegSetValueExW',
46
+ '<>ptr <WCHAR>ptr u32 u32@RegType <BYTE>ptr u32 -> i32')
47
+
48
+ /** 读键值(两跳模式:第一跳 lpData=NULL 取尺寸/类型,第二跳按尺寸带缓冲读数据)
49
+ * @returns 0 = ERROR_SUCCESS;2 = ERROR_FILE_NOT_FOUND(值不存在)
50
+ * @param args_0 hKey 键句柄(须 KEY_QUERY_VALUE 权限,含于 gui.RegAccess.READ)
51
+ * @param args_1 lpValueName 值名(NULL = 键的默认值)
52
+ * @param args_2 lpReserved 保留,恒 NULL
53
+ * @param args_3 lpType 出参:值类型(可 NULL)
54
+ * @param args_4 lpData 数据缓冲(可 NULL = 只查尺寸)
55
+ * @param args_5 lpcbData 双向:入 = lpData 缓冲字节数(须预写)、出 = 实际字节数 */
56
+ export const RegQueryValueEx = /*@__PURE__*/ b('RegQueryValueExW',
57
+ '<>ptr <WCHAR>ptr <>ptr <BYTE>ptr <BYTE>ptr <BYTE>ptr -> i32')
58
+
59
+ /** 删除子键(连值一起删);须父键 KEY_CREATE_SUB_KEY 权限——自己的 HKCU 直接传
60
+ * gui.HKey.CURRENT_USER 即可
61
+ * @returns 0 = ERROR_SUCCESS;2 = 子键不存在
62
+ * @param args_0 hKey 父键
63
+ * @param args_1 lpSubKey 要删的子键路径(不可 NULL) */
64
+ export const RegDeleteKey = /*@__PURE__*/ b('RegDeleteKeyW', '<>ptr <WCHAR>ptr -> i32')
@@ -1,18 +1,18 @@
1
- // comctl32 绑定(ImageList 系列;HIMAGELIST 为不透明句柄保持 <>ptr)
1
+ // comctl32 绑定(ImageList 系列;HIMAGELIST 不透明句柄走 <HIMAGELIST>ptr 自产自收,
2
+ // Add 的 hbm 位与 gdi32 的 <HGDIOBJ>ptr 同型互认——CreateBitmap 产物直传)
2
3
  import { bind } from '../ffi/bind.js';
3
4
  // dll 名部分应用(工厂转调保泛型 infer,见 lib/windows/user32.ts 头注释)
4
5
  const b = (name, sig) => bind('comctl32.dll', name, sig);
5
- /** 创建图像列表;失败 → 0
6
- * @param args_0 cx 图像宽度(像素)
7
- * @param args_1 cy 图像高度(像素)
8
- * @param args_2 flags ILC_* 标志(ILC_COLOR32 = 4)
9
- * @param args_3 initial 初始图像数,0 = 默认
10
- * @param args_4 grow 扩容步长,0 = 默认 */
11
- export const ImageListCreate = /*@__PURE__*/ b('ImageList_Create', 'i32 i32 u32 i32 i32 -> <>ptr');
12
- /** 追加位图到图像列表;返回新图像索引(-1 失败)
13
- * @param args_0 himl
14
- * @param args_1 hbmImage 源位图句柄(HBITMAP) */
15
- export const ImageListAdd = /*@__PURE__*/ b('ImageList_Add', '<>ptr <>ptr -> i32');
16
- /** 销毁图像列表;成功 → 非 0
17
- * @param args_0 himl */
18
- export const ImageListDestroy = /*@__PURE__*/ b('ImageList_Destroy', '<>ptr -> i32');
6
+ /** 建图像列表;配对 ImageListDestroy
7
+ * @returns 图像列表句柄;失败 → NULL
8
+ * @param args_0 cx/cy 图像尺寸 @param args_2 flags ILC_* 组合
9
+ * @param args_3 cInitial 初始容量 @param args_4 cGrow 增长步长 */
10
+ export const ImageListCreate = /*@__PURE__*/ b('ImageList_Create', 'i32 i32 u32 i32 i32 -> <HIMAGELIST>ptr');
11
+ /** 加位图进图像列表
12
+ * @returns 新索引(-1 失败)
13
+ * @param args_0 himl 图像列表句柄
14
+ * @param args_1 hbm 位图句柄(gdi32 <HGDIOBJ>ptr 产物,如 CreateCompatibleBitmap) */
15
+ export const ImageListAdd = /*@__PURE__*/ b('ImageList_Add', '<HIMAGELIST>ptr <HGDIOBJ>ptr -> i32');
16
+ /** 销毁图像列表
17
+ * @returns 成功 → 非 0 */
18
+ export const ImageListDestroy = /*@__PURE__*/ b('ImageList_Destroy', '<HIMAGELIST>ptr -> i32');
@@ -1,20 +1,19 @@
1
- // comctl32 绑定(ImageList 系列;HIMAGELIST 为不透明句柄保持 <>ptr)
1
+ // comctl32 绑定(ImageList 系列;HIMAGELIST 不透明句柄走 <HIMAGELIST>ptr 自产自收,
2
+ // Add 的 hbm 位与 gdi32 的 <HGDIOBJ>ptr 同型互认——CreateBitmap 产物直传)
2
3
  import { bind } from '../ffi/bind.js'
3
4
 
4
5
  // dll 名部分应用(工厂转调保泛型 infer,见 lib/windows/user32.ts 头注释)
5
6
  const b = <const S extends string>(name: string, sig: S) => bind('comctl32.dll', name, sig)
6
-
7
- /** 创建图像列表;失败 → 0
8
- * @param args_0 cx 图像宽度(像素)
9
- * @param args_1 cy 图像高度(像素)
10
- * @param args_2 flags ILC_* 标志(ILC_COLOR32 = 4)
11
- * @param args_3 initial 初始图像数,0 = 默认
12
- * @param args_4 grow 扩容步长,0 = 默认 */
13
- export const ImageListCreate = /*@__PURE__*/ b('ImageList_Create', 'i32 i32 u32 i32 i32 -> <>ptr')
14
- /** 追加位图到图像列表;返回新图像索引(-1 失败)
15
- * @param args_0 himl
16
- * @param args_1 hbmImage 源位图句柄(HBITMAP) */
17
- export const ImageListAdd = /*@__PURE__*/ b('ImageList_Add', '<>ptr <>ptr -> i32')
18
- /** 销毁图像列表;成功 → 非 0
19
- * @param args_0 himl */
20
- export const ImageListDestroy = /*@__PURE__*/ b('ImageList_Destroy', '<>ptr -> i32')
7
+ /** 建图像列表;配对 ImageListDestroy
8
+ * @returns 图像列表句柄;失败 → NULL
9
+ * @param args_0 cx/cy 图像尺寸 @param args_2 flags ILC_* 组合
10
+ * @param args_3 cInitial 初始容量 @param args_4 cGrow 增长步长 */
11
+ export const ImageListCreate = /*@__PURE__*/ b('ImageList_Create', 'i32 i32 u32 i32 i32 -> <HIMAGELIST>ptr')
12
+ /** 加位图进图像列表
13
+ * @returns 新索引(-1 失败)
14
+ * @param args_0 himl 图像列表句柄
15
+ * @param args_1 hbm 位图句柄(gdi32 <HGDIOBJ>ptr 产物,如 CreateCompatibleBitmap) */
16
+ export const ImageListAdd = /*@__PURE__*/ b('ImageList_Add', '<HIMAGELIST>ptr <HGDIOBJ>ptr -> i32')
17
+ /** 销毁图像列表
18
+ * @returns 成功 → 非 0 */
19
+ export const ImageListDestroy = /*@__PURE__*/ b('ImageList_Destroy', '<HIMAGELIST>ptr -> i32')
@@ -2,6 +2,7 @@
2
2
  import { bind } from '../ffi/bind.js';
3
3
  // dll 名部分应用(工厂转调保泛型 infer,见 lib/windows/user32.ts 头注释)
4
4
  const b = (name, sig) => bind('comdlg32.dll', name, sig);
5
- /** 打开/保存文件对话框;用户确认 → 非 0(lpstrFile 缓冲即选中路径),取消/出错 → 0
5
+ /** 打开/保存文件对话框
6
+ * @returns 用户确认 → 非 0(lpstrFile 缓冲即选中路径),取消/出错 → 0
6
7
  * @param args_0 pOpenfn OPENFILENAMEW.encode(...).ptr(lStructSize 必须 = OPENFILENAMEW.size,见 structs.ts) */
7
- export const GetOpenFileName = /*@__PURE__*/ b('GetOpenFileNameW', '<BYTE>ptr -> u32');
8
+ export const GetOpenFileName = /*@__PURE__*/ b('GetOpenFileNameW', '<OPENFILENAMEW>ptr -> u32');
@@ -4,6 +4,7 @@ import { bind } from '../ffi/bind.js'
4
4
  // dll 名部分应用(工厂转调保泛型 infer,见 lib/windows/user32.ts 头注释)
5
5
  const b = <const S extends string>(name: string, sig: S) => bind('comdlg32.dll', name, sig)
6
6
 
7
- /** 打开/保存文件对话框;用户确认 → 非 0(lpstrFile 缓冲即选中路径),取消/出错 → 0
7
+ /** 打开/保存文件对话框
8
+ * @returns 用户确认 → 非 0(lpstrFile 缓冲即选中路径),取消/出错 → 0
8
9
  * @param args_0 pOpenfn OPENFILENAMEW.encode(...).ptr(lStructSize 必须 = OPENFILENAMEW.size,见 structs.ts) */
9
- export const GetOpenFileName = /*@__PURE__*/ b('GetOpenFileNameW', '<BYTE>ptr -> u32')
10
+ export const GetOpenFileName = /*@__PURE__*/ b('GetOpenFileNameW', '<OPENFILENAMEW>ptr -> u32')
@@ -1,42 +1,65 @@
1
1
  // gdi32 绑定(品牌约定见 lib/windows/user32.ts 头注释):
2
2
  // - HDC 出入参用 <HDC>ptr(品牌指针 Ptr<'HDC'>,与 user32 的 GetDC/ReleaseDC 同型互认)
3
- // - GDI 对象通用句柄(HBRUSH/HPEN/HFONT/HBITMAP 在 Win32 同为 HGDIOBJ)保持 <>ptr——
4
- // 异种对象互传由运行时句柄有效性判定,类型层不设品牌
3
+ // - GDI 对象通用句柄统一 <HGDIOBJ>ptr(HBRUSH/HPEN/HFONT/HBITMAP/HRGN 在 Win32 同为
4
+ // HGDIOBJ):创建/选入/取出/删除全链同品牌闭环,拦 DeleteObject(hdc) 类异种误传;
5
+ // user32 结构里的 HBRUSH 字段仍收裸位——品牌值赋给裸 number 位天然兼容
5
6
  // - 结构位按方向分流:CreateFontIndirect 的 LOGFONTW 是纯入参位,注册 encoder 收
6
7
  // DeepPartial 对象直传(缺省字段跳过 = 保持 0 合法零值语义)
7
8
  import { bind } from '../ffi/bind.js';
8
- import { LOGFONTW } from './structs.js';
9
+ import { structArray } from '../ffi/struct.js';
10
+ import { LOGFONTW, POINT, RECT } from './structs.js';
9
11
  // dll 名部分应用(工厂转调保泛型 infer,见 lib/windows/user32.ts 头注释;第三参透传 encoders)
10
12
  const b = (name, sig, encoders) => bind('gdi32.dll', name, sig, encoders);
11
- /** 创建实心画刷;失败 → 0;配对 DeleteObject
13
+ // 点数组编解码对(Polyline/Polygon/PlgBlt 共享):注册后 <POINT>ptr 位收元素数组
14
+ // (值域由 encoder 推导),C 侧 NULL 位传 NULL(number 直通),[]/单对象 fail-loud
15
+ const POINTArr = structArray(POINT);
16
+ /** 创建实心画刷;配对 DeleteObject
17
+ * @returns 失败 → 0
12
18
  * @param args_0 crColor 画刷颜色 0x00BBGGRR */
13
- export const CreateSolidBrush = /*@__PURE__*/ b('CreateSolidBrush', 'u32 -> <>ptr');
14
- /** 删除 GDI 对象(画刷/画笔/字体/位图等通用句柄,传 CreateXxx 返回的 number);成功 → 非 0
19
+ export const CreateSolidBrush = /*@__PURE__*/ b('CreateSolidBrush', 'u32 -> <HGDIOBJ>ptr');
20
+ /** 删除 GDI 对象(画刷/画笔/字体/位图等通用句柄,传 CreateXxx 返回的 number)
21
+ * @returns 成功 → 非 0
15
22
  * @param args_0 hGdiObj */
16
- export const DeleteObject = /*@__PURE__*/ b('DeleteObject', '<>ptr -> i32');
23
+ export const DeleteObject = /*@__PURE__*/ b('DeleteObject', '<HGDIOBJ>ptr -> i32');
17
24
  /** 取设备能力值
25
+ * @returns 索引对应的设备能力值
18
26
  * @param args_0 hdc
19
27
  * @param args_1 index 能力索引(LOGPIXELSX = 88,LOGPIXELSY = 90,BITSPIXEL = 12 等) */
20
28
  export const GetDeviceCaps = /*@__PURE__*/ b('GetDeviceCaps', '<HDC>ptr! i32@DeviceCap -> i32');
21
29
  /** 按 LOGFONTW 创建字体(入参位对象直传 DeepPartial:至少给 lfHeight 与 lfFaceName,其余缺省
22
- * 跳过保持 0);失败 → 0;配对 DeleteObject
30
+ * 跳过保持 0);配对 DeleteObject
31
+ * @returns 失败 → 0
23
32
  * @param args_0 lplf LOGFONTW 对象 */
24
- export const CreateFontIndirect = /*@__PURE__*/ b('CreateFontIndirectW', '<LOGFONTW>ptr -> <>ptr', { LOGFONTW });
33
+ export const CreateFontIndirect = /*@__PURE__*/ b('CreateFontIndirectW', '<LOGFONTW>ptr -> <HGDIOBJ>ptr', { LOGFONTW });
25
34
  // ============ 内存 DC / 位图(截屏类流程:CreateCompatibleDC → SelectObject → BitBlt → GetDIBits)============
26
- /** 建与 hdc 兼容的内存 DC;失败 → NULL;配对 DeleteDC
35
+ /** 建与 hdc 兼容的内存 DC;配对 DeleteDC
36
+ * @returns 失败 → NULL
27
37
  * @param args_0 hdc 参考 DC,NULL = 与屏幕兼容 */
28
38
  export const CreateCompatibleDC = /*@__PURE__*/ b('CreateCompatibleDC', '<HDC>ptr -> <HDC>ptr');
29
39
  /** 建与 hdc 兼容的位图(尺寸取决于 hdc 当前选中对象:内存 DC 刚建时选中 1×1 单色图,
30
- * 所以要传屏幕 DC);失败 → NULL;配对 DeleteObject
40
+ * 所以要传屏幕 DC);配对 DeleteObject
41
+ * @returns 失败 → NULL
31
42
  * @param args_0 hdc 参考 DC(决定位图格式,须为屏幕或真实 DC)
32
43
  * @param args_1 cx 宽度(像素)
33
44
  * @param args_2 cy 高度(像素) */
34
- export const CreateCompatibleBitmap = /*@__PURE__*/ b('CreateCompatibleBitmap', '<HDC>ptr! i32 i32 -> <>ptr');
35
- /** 把 GDI 对象选进 hdc,返回被替换的旧对象(用完选回去再删除新对象);失败 → NULL
45
+ export const CreateCompatibleBitmap = /*@__PURE__*/ b('CreateCompatibleBitmap', '<HDC>ptr! i32 i32 -> <HGDIOBJ>ptr');
46
+ /** 创建独立位图(与任何 DC 无关);bits 喂原始像素缓冲则直接初始化(NULL = 未初始化);
47
+ * 1bpp 单色行内 bit7 = 最左像素、行按 word(2B) 对齐(非 DIB 的 4B,MaskBlt 实测);
48
+ * 配对 DeleteObject
49
+ * @returns 失败 → 0
50
+ * @param args_0 nWidth 宽(像素)
51
+ * @param args_1 nHeight 高(像素)
52
+ * @param args_2 nPlanes 色平面数(恒 1)
53
+ * @param args_3 nBitCount 每像素位数(1 = 单色 / 32 = BGRA)
54
+ * @param args_4 lpBits 原始像素缓冲(ArrayBuffer,可 NULL) */
55
+ export const CreateBitmap = /*@__PURE__*/ b('CreateBitmap', 'i32 i32 u32 u32 <BYTE>ptr -> <HGDIOBJ>ptr');
56
+ /** 把 GDI 对象选进 hdc(用完选回去再删除新对象)
57
+ * @returns 被替换的旧对象;失败 → NULL
36
58
  * @param args_0 hdc 目标 DC
37
59
  * @param args_1 h 新对象句柄(HGDIOBJ 通称) */
38
- export const SelectObject = /*@__PURE__*/ b('SelectObject', '<HDC>ptr! <>ptr -> <>ptr');
39
- /** 位块传送;成功 → 非 0
60
+ export const SelectObject = /*@__PURE__*/ b('SelectObject', '<HDC>ptr! <HGDIOBJ>ptr -> <HGDIOBJ>ptr');
61
+ /** 位块传送
62
+ * @returns 成功 → 非 0
40
63
  * @param args_0 hdcDest 目标 DC
41
64
  * @param args_1 xDest 目标左上角 x
42
65
  * @param args_2 yDest 目标左上角 y
@@ -45,11 +68,12 @@ export const SelectObject = /*@__PURE__*/ b('SelectObject', '<HDC>ptr! <>ptr ->
45
68
  * @param args_5 hdcSrc 源 DC
46
69
  * @param args_6 x1 源起始 x
47
70
  * @param args_7 y1 源起始 y
48
- * @param args_8 dwRop 光栅操作码(SRCCOPY = 0x00CC0020) */
71
+ * @param args_8 dwRop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码(标 @ 枚举拦手误值) */
49
72
  // hdcDest 非空(!);hdcSrc 在 PATCOPY 等特定 rop 下 C 允许 NULL,保持可空档。
50
- export const BitBlt = /*@__PURE__*/ b('BitBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 u32 -> i32');
73
+ export const BitBlt = /*@__PURE__*/ b('BitBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 u32@RasterOp -> i32');
51
74
  /** 取位图像素到 lpvBits(lpbmi 为 BITMAPINFO,32bpp BI_RGB 无颜色表时头部即全部:
52
- * 有颜色表的格式由调用方自备更大的缓冲);返回成功取到的扫描行数,失败 → 0
75
+ * 有颜色表的格式由调用方自备更大的缓冲)
76
+ * @returns 成功取到的扫描行数;失败 → 0
53
77
  * @param args_0 hdc
54
78
  * @param args_1 hbm 位图句柄
55
79
  * @param args_2 uStartScan 起始扫描行
@@ -57,24 +81,85 @@ export const BitBlt = /*@__PURE__*/ b('BitBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>
57
81
  * @param args_4 lpvBits 像素接收缓冲(ArrayBuffer)
58
82
  * @param args_5 lpbmi BITMAPINFO 缓冲(BITMAPINFOHEADER.encode({...}).ptr)
59
83
  * @param args_6 uUsage DIB_RGB_COLORS(0) */
60
- export const GetDIBits = /*@__PURE__*/ b('GetDIBits', '<HDC>ptr! <>ptr u32 u32 <BYTE>ptr <>ptr u32 -> i32');
61
- /** 取 GDI 对象信息到 lpv(hFont → LOGFONTW 等);返回写入的字节数,失败 → 0
84
+ export const GetDIBits = /*@__PURE__*/ b('GetDIBits', '<HDC>ptr! <HGDIOBJ>ptr u32 u32 <BYTE>ptr <>ptr u32 -> i32');
85
+ /** 取 GDI 对象信息到 lpv(hFont → LOGFONTW 等)
86
+ * @returns 写入的字节数;失败 → 0
62
87
  * @param args_0 h GDI 对象句柄(字体/画笔/位图等)
63
88
  * @param args_1 cb 输出缓冲字节数(如 LOGFONTW.size)
64
89
  * @param args_2 lpv 输出缓冲(LOGFONTW.alloc() 等) */
65
- export const GetObject = /*@__PURE__*/ b('GetObjectW', '<>ptr i32 <BYTE>ptr -> i32');
66
- /** 删除内存 DC(CreateCompatibleDC 建的);成功 → 非 0
90
+ export const GetObject = /*@__PURE__*/ b('GetObjectW', '<HGDIOBJ>ptr i32 <BYTE>ptr -> i32');
91
+ /** 删除内存 DC(CreateCompatibleDC 建的)
92
+ * @returns 成功 → 非 0
67
93
  * @param args_0 hdc 要删的 DC */
68
94
  export const DeleteDC = /*@__PURE__*/ b('DeleteDC', '<HDC>ptr! -> i32');
69
- /** 用画刷图案填充矩形;成功 → 非 0
95
+ /** 用画刷图案填充矩形
96
+ * @returns 成功 → 非 0
70
97
  * @param args_0 hdc 目标 DC
71
98
  * @param args_1 x 左上角 x
72
99
  * @param args_2 y 左上角 y
73
100
  * @param args_3 w 宽度
74
101
  * @param args_4 h 高度
75
- * @param args_5 rop 光栅操作码(PATCOPY 等) */
76
- export const PatBlt = /*@__PURE__*/ b('PatBlt', '<HDC>ptr! i32 i32 i32 i32 u32 -> i32');
77
- /** 把 DIB 位图画到目标 DC;返回扫描行数,失败 → 0
102
+ * @param args_5 rop gui.RasterOp.PATCOPY / WHITENESS 等互斥单选光栅操作码 */
103
+ export const PatBlt = /*@__PURE__*/ b('PatBlt', '<HDC>ptr! i32 i32 i32 i32 u32@RasterOp -> i32');
104
+ /** 拉伸位图传送(源区 wSrc×hSrc 放/缩到目标 wDest×hDest)
105
+ * @returns 成功 → 非 0
106
+ * @param args_0 hdcDest 目标 DC
107
+ * @param args_1 xDest 目标左上 x
108
+ * @param args_2 yDest 目标左上 y
109
+ * @param args_3 wDest 目标宽
110
+ * @param args_4 hDest 目标高
111
+ * @param args_5 hdcSrc 源 DC
112
+ * @param args_6 xSrc 源区左上 x
113
+ * @param args_7 ySrc 源区左上 y
114
+ * @param args_8 wSrc 源区宽
115
+ * @param args_9 hSrc 源区高
116
+ * @param args_10 dwRop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码 */
117
+ export const StretchBlt = /*@__PURE__*/ b('StretchBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 i32 i32 u32@RasterOp -> i32');
118
+ /** 设置拉伸取色模式;放大时各模式像素同为源色,缩小时降采样策略不同
119
+ * (DELETESCANS 丢行 / HALFTONE 平均取色最保真)
120
+ * @returns 旧值
121
+ * @param args_0 hdc 目标 DC
122
+ * @param args_1 iMode gui.StretchBltMode.ANDSCANS(1) / ORSCANS(2) / DELETESCANS(3) / HALFTONE(4) */
123
+ export const SetStretchBltMode = /*@__PURE__*/ b('SetStretchBltMode', '<HDC>ptr! i32@StretchBltMode -> i32');
124
+ /** 读拉伸取色模式(值域 = gui.StretchBltMode 成员);回传
125
+ * SetStretchBltMode 前需按成员值使用(裸 number 进不了枚举位)
126
+ * @returns number */
127
+ export const GetStretchBltMode = /*@__PURE__*/ b('GetStretchBltMode', '<HDC>ptr! -> i32');
128
+ /** 平行四边形位图传送(源矩形映射到 lpPoint 三点定的平行四边形 = 旋转/斜切贴图,
129
+ * 源区随之缩放到三点形)
130
+ * @returns 成功 → 非 0
131
+ * @param args_0 hdcDest 目标 DC
132
+ * @param args_1 lpPoint 三点数组 [左上, 右上, 左下](structArray(POINT) encoder,必须 3 点)
133
+ * @param args_2 hdcSrc 源 DC
134
+ * @param args_3 xSrc 源区左上 x
135
+ * @param args_4 ySrc 源区左上 y
136
+ * @param args_5 width 源区宽
137
+ * @param args_6 height 源区高
138
+ * @param args_7 hbmMask 可选单色掩码(NULL = 直接贴)
139
+ * @param args_8 xMask 掩码内起点 x(掩码为 NULL 时忽略)
140
+ * @param args_9 yMask 掩码内起点 y */
141
+ export const PlgBlt = /*@__PURE__*/ b('PlgBlt', '<HDC>ptr! <POINT>ptr <HDC>ptr i32 i32 i32 i32 <>ptr i32 i32 -> i32', { POINT: POINTArr });
142
+ /** 单色掩码位块传送:掩码非零处取前景三元 rop、零处取背景三元 rop;
143
+ * dwRop = MAKEROP4(fore, back) 打包(gdi32.ts 不导出辅助,公式内联):
144
+ * rop = (((back << 8) & 0xFF000000) | fore) >>> 0
145
+ * (背景操作码在 bit31..24、前景在 bit23..16、低 16 位被 GDI 忽略;
146
+ * hbmMask NULL = 等同 BitBlt 用 fore)
147
+ * @returns 成功 → 非 0
148
+ * @param args_0 hdcDest 目标 DC
149
+ * @param args_1 xDest 目标左上 x
150
+ * @param args_2 yDest 目标左上 y
151
+ * @param args_3 width 目标/源宽(MaskBlt 源目标同尺寸,不缩放)
152
+ * @param args_4 height 目标/源高
153
+ * @param args_5 hdcSrc 源 DC
154
+ * @param args_6 xSrc 源区左上 x
155
+ * @param args_7 ySrc 源区左上 y
156
+ * @param args_8 hbmMask 单色掩码位图(CreateBitmap(1bpp),可 NULL)
157
+ * @param args_9 xMask 掩码内起点 x
158
+ * @param args_10 yMask 掩码内起点 y
159
+ * @param args_11 dwRop MAKEROP4 打包值(双 rop 组合域,非 @RasterOp 单值) */
160
+ export const MaskBlt = /*@__PURE__*/ b('MaskBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 <>ptr i32 i32 u32 -> i32');
161
+ /** 把 DIB 位图画到目标 DC
162
+ * @returns 扫描行数;失败 → 0
78
163
  * @param args_0 hdc 目标 DC
79
164
  * @param args_1 xDest 目标左上角 x
80
165
  * @param args_2 yDest 目标左上角 y
@@ -88,3 +173,220 @@ export const PatBlt = /*@__PURE__*/ b('PatBlt', '<HDC>ptr! i32 i32 i32 i32 u32 -
88
173
  * @param args_10 lpbmi BITMAPINFO 缓冲
89
174
  * @param args_11 iUsage DIB_RGB_COLORS(0) */
90
175
  export const SetDIBitsToDevice = /*@__PURE__*/ b('SetDIBitsToDevice', '<HDC>ptr! i32 i32 u32 u32 i32 i32 u32 u32 <BYTE>ptr <BYTE>ptr u32 -> i32');
176
+ /** 拉伸 DIB 传送(内存像素缓冲直接放/缩到目标,免创建 HBITMAP 中转);
177
+ * DestWidth/DestHeight 传 0 = 源自然尺寸;SrcWidth/SrcHeight 负 = 翻转
178
+ * @returns 成功 → 扫描行数;失败 → 0
179
+ * @param args_1 xDest 目标左上 x
180
+ * @param args_2 yDest 目标左上 y
181
+ * @param args_3 DestWidth 目标宽
182
+ * @param args_4 DestHeight 目标高
183
+ * @param args_5 xSrc 源区左上 x
184
+ * @param args_6 ySrc 源区左上 y
185
+ * @param args_7 SrcWidth 源区宽
186
+ * @param args_8 SrcHeight 源区高
187
+ * @param args_9 lpvBits 像素缓冲(ArrayBuffer)
188
+ * @param args_10 lpbmi BITMAPINFO 缓冲(BITMAPINFOHEADER.encode({...}).ptr)
189
+ * @param args_11 iUsage DIB_RGB_COLORS(0)
190
+ * @param args_12 rop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码 */
191
+ export const StretchDIBits = /*@__PURE__*/ b('StretchDIBits', '<HDC>ptr! i32 i32 i32 i32 i32 i32 i32 i32 <BYTE>ptr <BYTE>ptr u32 u32@RasterOp -> i32');
192
+ // ============ 画图原语(笔 / 线 / 形状 / 文字) ============
193
+ /** 取系统共享对象(笔/刷/字体/调色板);共享句柄不要 DeleteObject——
194
+ * SelectObject 选入 hdc 生效(如 NULL_BRUSH 让形状只描边不填充)
195
+ * @returns 失败 → 0
196
+ * @param args_0 iObject gui.StockObject.NULL_BRUSH / BLACK_PEN / DEFAULT_GUI_FONT 等 */
197
+ export const GetStockObject = /*@__PURE__*/ b('GetStockObject', 'i32@StockObject -> <HGDIOBJ>ptr');
198
+ /** 创建网格纹理画刷(线色 = crColor,间隙 = 背景:SetBkMode=TRANSPARENT 透底、OPAQUE
199
+ * 用 SetBkColor);配对 DeleteObject
200
+ * @returns 失败 → 0
201
+ * @param args_0 iHatch gui.HatchStyle.HORIZONTAL(横线)/ VERTICAL / FDIAGONAL /
202
+ * BDIAGONAL / CROSS / DIAGCROSS
203
+ * @param args_1 crColor 纹理线颜色 0x00BBGGRR */
204
+ export const CreateHatchBrush = /*@__PURE__*/ b('CreateHatchBrush', 'i32@HatchStyle u32 -> <HGDIOBJ>ptr');
205
+ /** 创建位图平铺画刷(小位图铺满填充区;平铺锚定设备原点 (0,0),与目标矩形角无关);
206
+ * 配对 DeleteObject —— 位图在画刷删除后再 DeleteObject(保守生命周期)
207
+ * @returns 失败 → 0
208
+ * @param args_0 hbm 位图句柄(CreateCompatibleBitmap 返回;调用前先退出选入状态) */
209
+ export const CreatePatternBrush = /*@__PURE__*/ b('CreatePatternBrush', '<HGDIOBJ>ptr -> <HGDIOBJ>ptr');
210
+ /** 创建画笔(选入 hdc 生效,SelectObject 选回旧对象后 DeleteObject 配对)
211
+ * @returns 失败 → 0
212
+ * @param args_0 iStyle 笔型(gui.PenStyle.SOLID / DASH / NULL 等)
213
+ * @param args_1 cWidth 笔宽(像素;>1 的几何宽设备相关,虚线样式可能被拉伸)
214
+ * @param args_2 crColor 笔色 0x00BBGGRR */
215
+ export const CreatePen = /*@__PURE__*/ b('CreatePen', 'i32@PenStyle i32 u32 -> <HGDIOBJ>ptr');
216
+ /** 设置文字/阴影背景填充模式
217
+ * @returns 旧模式(新建 DC 默认 OPAQUE)
218
+ * @param args_0 hdc 目标 DC
219
+ * @param args_1 iBkMode gui.BackgroundMode.OPAQUE(衬底填充)/ TRANSPARENT(透明) */
220
+ export const SetBkMode = /*@__PURE__*/ b('SetBkMode', '<HDC>ptr! i32@BackgroundMode -> i32');
221
+ /** 设置文字颜色
222
+ * @returns 旧 COLORREF(0x00BBGGRR)
223
+ * @param args_0 hdc 目标 DC
224
+ * @param args_1 color 新文字色 0x00BBGGRR */
225
+ export const SetTextColor = /*@__PURE__*/ b('SetTextColor', '<HDC>ptr! u32 -> u32');
226
+ /** 设置背景(SetBkMode=OPAQUE 时的衬底)颜色
227
+ * @returns 旧 COLORREF(0x00BBGGRR)
228
+ * @param args_0 hdc 目标 DC
229
+ * @param args_1 color 新背景色 0x00BBGGRR */
230
+ export const SetBkColor = /*@__PURE__*/ b('SetBkColor', '<HDC>ptr! u32 -> u32');
231
+ /** 保存 DC 当前绘图状态到 GDI 状态栈(颜色/模式/选中笔刷字体/裁剪区/映射模式…);
232
+ * 配对 RestoreDC——标准用法:进入绘制块 Save、退出 Restore
233
+ * @returns 状态 ID(0 = 失败)
234
+ * @param args_0 hdc 目标 DC */
235
+ export const SaveDC = /*@__PURE__*/ b('SaveDC', '<HDC>ptr! -> i32');
236
+ /** 从状态栈恢复 SaveDC 保存的 DC 状态(对应 ID 及更晚的保存随之失效)
237
+ * @returns 成功 → 非 0
238
+ * @param args_0 hdc 目标 DC
239
+ * @param args_1 state SaveDC 返回的状态 ID,或 -1 = 最近一次保存 */
240
+ export const RestoreDC = /*@__PURE__*/ b('RestoreDC', '<HDC>ptr! i32 -> i32');
241
+ /** 设置多边形填充规则
242
+ * @returns 旧值(新建 DC 默认 ALTERNATE = 奇偶规则)
243
+ * @param args_0 hdc 目标 DC
244
+ * @param args_1 iMode gui.PolyFillMode.ALTERNATE(自相交区域交替镂空)/
245
+ * WINDING(非零环绕,自相交区域整体实心) */
246
+ export const SetPolyFillMode = /*@__PURE__*/ b('SetPolyFillMode', '<HDC>ptr! i32@PolyFillMode -> i32');
247
+ /** 设置前景画笔与目的像素的混合方式(二元光栅模式);
248
+ * R2_XORPEN 可逆(同路径画两次抵消原样),适合橡皮筋交互
249
+ * @returns 旧值(默认 R2_COPYPEN = 直接画)
250
+ * @param args_0 hdc 目标 DC
251
+ * @param args_1 iMode gui.RasterMode.R2_COPYPEN / R2_XORPEN / R2_NOT 等(单选,标 @ 枚举) */
252
+ export const SetROP2 = /*@__PURE__*/ b('SetROP2', '<HDC>ptr! i32@RasterMode -> i32');
253
+ /** 设置弧/弦/扇形的扫过方向
254
+ * @returns 旧值(新 DC 默认逆时针)
255
+ * @param args_0 hdc 目标 DC
256
+ * @param args_1 iDir gui.ArcDirection.COUNTERCLOCKWISE(默认)/ CLOCKWISE */
257
+ export const SetArcDirection = /*@__PURE__*/ b('SetArcDirection', '<HDC>ptr! i32@ArcDirection -> i32');
258
+ /** 读弧扫过方向
259
+ * @returns AD_COUNTERCLOCKWISE=1 / AD_CLOCKWISE=2;失败 → 0 */
260
+ export const GetArcDirection = /*@__PURE__*/ b('GetArcDirection', '<HDC>ptr! -> i32');
261
+ /** 移动画笔当前位置;lppt 接旧位置出参
262
+ * @returns 成功 → 非 0
263
+ * @param args_0 hdc 目标 DC
264
+ * @param args_1 x 新位置 x
265
+ * @param args_2 y 新位置 y
266
+ * @param args_3 lppt 出参位:传 POINT.alloc() 的 .ptr 接旧位置,或传 NULL 不要 ——
267
+ * 刻意不注册 encoder(纯出参;对象形物化进引擎持有的缓冲,调用方读不到) */
268
+ export const MoveToEx = /*@__PURE__*/ b('MoveToEx', '<HDC>ptr! i32 i32 <POINT>ptr -> i32');
269
+ /** 从当前位置画线到 (x,y)(不含端点),当前位置随之移动
270
+ * @returns 成功 → 非 0
271
+ * @param args_0 hdc 目标 DC
272
+ * @param args_1 x 终点 x
273
+ * @param args_2 y 终点 y */
274
+ export const LineTo = /*@__PURE__*/ b('LineTo', '<HDC>ptr! i32 i32 -> i32');
275
+ /** 画折线(当前画笔描边,不填充、不自动闭合)
276
+ * @returns 成功 → 非 0
277
+ * @param args_0 hdc 目标 DC
278
+ * @param args_1 pts 点数组(structArray(POINT) encoder 直传元素数组;NULL 位传 NULL,
279
+ * []/单对象 fail-loud)
280
+ * @param args_2 cPoints 点数(= pts.length,C 侧显式计数位) */
281
+ export const Polyline = /*@__PURE__*/ b('Polyline', '<HDC>ptr! <POINT>ptr i32 -> i32', { POINT: POINTArr });
282
+ /** 多边形(画笔描边 + 当前画刷填充,首尾自动闭合)
283
+ * @returns 成功 → 非 0
284
+ * @param args_0 hdc 目标 DC
285
+ * @param args_1 pts 点数组(structArray(POINT) encoder 直传元素数组;NULL 位传 NULL)
286
+ * @param args_2 cPoints 点数(= pts.length) */
287
+ export const Polygon = /*@__PURE__*/ b('Polygon', '<HDC>ptr! <POINT>ptr i32 -> i32', { POINT: POINTArr });
288
+ /** 矩形(画笔描边 + 当前画刷填充;右/下边缘不画入区域)
289
+ * @returns 成功 → 非 0
290
+ * @param args_0 hdc 目标 DC
291
+ * @param args_1 l 左上 x
292
+ * @param args_2 t 左上 y
293
+ * @param args_3 r 右下 x(不含)
294
+ * @param args_4 b 右下 y(不含) */
295
+ export const Rectangle = /*@__PURE__*/ b('Rectangle', '<HDC>ptr! i32 i32 i32 i32 -> i32');
296
+ /** 椭圆(外接矩形内切,边缘可达四边中点;描边 + 填充)
297
+ * @returns 成功 → 非 0
298
+ * @param args_0 hdc 目标 DC
299
+ * @param args_1 l 外接矩形左 x
300
+ * @param args_2 t 外接矩形上 y
301
+ * @param args_3 r 外接矩形右 x
302
+ * @param args_4 b 外接矩形下 y */
303
+ export const Ellipse = /*@__PURE__*/ b('Ellipse', '<HDC>ptr! i32 i32 i32 i32 -> i32');
304
+ /** 圆角矩形(四角为 w×h 椭圆弧;描边 + 填充)
305
+ * @returns 成功 → 非 0
306
+ * @param args_0 hdc 目标 DC
307
+ * @param args_1 l 左上 x
308
+ * @param args_2 t 左上 y
309
+ * @param args_3 r 右下 x(不含)
310
+ * @param args_4 b 右下 y(不含)
311
+ * @param args_5 w 四角椭圆横半径
312
+ * @param args_6 h 四角椭圆纵半径 */
313
+ export const RoundRect = /*@__PURE__*/ b('RoundRect', '<HDC>ptr! i32 i32 i32 i32 i32 i32 -> i32');
314
+ /** 画圆弧(外接矩形内切椭圆上起点→终点的弧,默认逆时针、SetArcDirection 可改向;
315
+ * 仅描边,不填充、不闭合)
316
+ * @returns 成功 → 非 0
317
+ * @param args_0 hdc 目标 DC
318
+ * @param args_1 l 外接矩形左 x
319
+ * @param args_2 t 外接矩形上 y
320
+ * @param args_3 r 外接矩形右 x
321
+ * @param args_4 b 外接矩形下 y
322
+ * @param args_5 xStart 弧起点 x(矩形中心与该点连线在弧上的交点为起端)
323
+ * @param args_6 yStart 弧起点 y
324
+ * @param args_7 xEnd 弧终点 x
325
+ * @param args_8 yEnd 弧终点 y */
326
+ export const Arc = /*@__PURE__*/ b('Arc', '<HDC>ptr! i32 i32 i32 i32 i32 i32 i32 i32 -> i32');
327
+ /** 弓形(弧 + 起终点间弦闭合;描边 + 当前画刷填充)
328
+ * @returns 成功 → 非 0
329
+ * @param args_0 hdc 目标 DC
330
+ * @param args_1 l 外接矩形左 x
331
+ * @param args_2 t 外接矩形上 y
332
+ * @param args_3 r 外接矩形右 x
333
+ * @param args_4 b 外接矩形下 y
334
+ * @param args_5 xStart 弧起点 x
335
+ * @param args_6 yStart 弧起点 y
336
+ * @param args_7 xEnd 弧终点 x
337
+ * @param args_8 yEnd 弧终点 y */
338
+ export const Chord = /*@__PURE__*/ b('Chord', '<HDC>ptr! i32 i32 i32 i32 i32 i32 i32 i32 -> i32');
339
+ /** 扇形(弧 + 中心到两端半径闭合;描边 + 当前画刷填充)
340
+ * @returns 成功 → 非 0
341
+ * @param args_0 hdc 目标 DC
342
+ * @param args_1 l 外接矩形左 x
343
+ * @param args_2 t 外接矩形上 y
344
+ * @param args_3 r 外接矩形右 x
345
+ * @param args_4 b 外接矩形下 y
346
+ * @param args_5 xStart 弧起点 x(半径端)
347
+ * @param args_6 yStart 弧起点 y
348
+ * @param args_7 xEnd 弧终点 x
349
+ * @param args_8 yEnd 弧终点 y */
350
+ export const Pie = /*@__PURE__*/ b('Pie', '<HDC>ptr! i32 i32 i32 i32 i32 i32 i32 i32 -> i32');
351
+ /** 底层文字输出(颜色走 SetTextColor、衬底走 SetBkMode/SetBkColor,位置受 SetTextAlign
352
+ * 默认左上对齐约束)
353
+ * @returns 成功 → 非 0
354
+ * @param args_0 hdc 目标 DC
355
+ * @param args_1 x 起点 x
356
+ * @param args_2 y 起点 y
357
+ * @param args_3 str 文本(<WCHAR>ptr 位直传 string,引擎 UTF-16 编码并持活到调用结束)
358
+ * @param args_4 c 字符数(= str.length;C 要字符数不是字节数,不含 NUL) */
359
+ export const TextOut = /*@__PURE__*/ b('TextOutW', '<HDC>ptr! i32 i32 <WCHAR>ptr i32 -> i32');
360
+ /** 设置 TextOut/ExtTextOut 的对齐与当前位置更新方式;TA_* 按位组合
361
+ * (如 gui.TextAlign.TA_CENTER | gui.TextAlign.TA_UPDATECP),故签名保持 u32 不标枚举
362
+ * @returns 旧 flags(新 DC 默认 TA_LEFT|TA_TOP|TA_NOUPDATECP = 0)
363
+ * @param args_0 hdc 目标 DC
364
+ * @param args_1 fMode gui.TextAlign 成员按位或 */
365
+ export const SetTextAlign = /*@__PURE__*/ b('SetTextAlign', '<HDC>ptr! u32 -> u32');
366
+ /** 按当前字体量字符串宽高(不含衬底与额外间距)
367
+ * @returns 成功 → 非 0
368
+ * @param args_0 hdc 目标 DC
369
+ * @param args_1 str 文本(<WCHAR>ptr 直传 string)
370
+ * @param args_2 c 字符数(= str.length)
371
+ * @param args_3 lpSize 出参位:SIZE.alloc().ptr 接 { cx, cy },SIZE.decode(ptr) 读回
372
+ * (标 !:没出参此 API 无意义) */
373
+ export const GetTextExtentPoint32 = /*@__PURE__*/ b('GetTextExtentPoint32W', '<HDC>ptr! <WCHAR>ptr i32 <SIZE>ptr! -> i32');
374
+ /** 取当前字体完整度量(行高/ascent/descent/字符宽等 20 字段)
375
+ * @returns 成功 → 非 0
376
+ * @param args_0 hdc 目标 DC
377
+ * @param args_1 lptm 出参位:TEXTMETRICW.alloc().ptr 接、TEXTMETRICW.decode(ptr) 读回
378
+ * (标 !:没出参此 API 无意义,同 GetTextExtentPoint32 的 SIZE 位) */
379
+ export const GetTextMetrics = /*@__PURE__*/ b('GetTextMetricsW', '<HDC>ptr! <TEXTMETRICW>ptr! -> i32');
380
+ /** 底层文字输出增强版(可选矩形衬底/裁剪 + 可选每字符间距)
381
+ * @returns 成功 → 非 0
382
+ * @param args_0 hdc 目标 DC
383
+ * @param args_1 x 起点 x
384
+ * @param args_2 y 起点 y
385
+ * @param args_3 fOptions gui.TextOutOptions.ETO_OPAQUE(矩形填衬底)|
386
+ * ETO_CLIPPED(矩形裁剪字形)按位或(可 0 = 都不用)
387
+ * @param args_4 lprc ETO_OPAQUE/ETO_CLIPPED 的作用矩形:DeepPartial 对象直传 /
388
+ * RECT.alloc().ptr / NULL = 整个当前可裁剪区(有 encoder 的纯入参位三形态)
389
+ * @param args_5 str 文本(<WCHAR>ptr 直传 string)
390
+ * @param args_6 c 字符数(= str.length)
391
+ * @param args_7 lpDx 每字符间距数组位:本版仅收 NULL(默认等宽间距),数组形态留后续 */
392
+ export const ExtTextOut = /*@__PURE__*/ b('ExtTextOutW', '<HDC>ptr! i32 i32 u32 <RECT>ptr <WCHAR>ptr i32 <>ptr -> i32', { RECT });