quickwin 2.1.1 → 2.3.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 (117) hide show
  1. package/README.en.md +9 -9
  2. package/README.md +9 -9
  3. package/constants.ts +1063 -0
  4. package/enum_map.d.ts +129 -0
  5. package/examples/PdfCanvas.js +2 -2
  6. package/examples/PdfCanvas.tsx +3 -2
  7. package/examples/{exec_server.js → execd/main.js} +1114 -287
  8. package/examples/execd/tray.js +192 -0
  9. package/examples/execd/worker.js +122 -0
  10. package/examples/pdf_preview2.js +46 -46
  11. package/examples/pdf_preview2.ts +55 -54
  12. package/examples/pdf_viewer.js +134 -130
  13. package/examples/pdf_viewer.tsx +6 -5
  14. package/examples/test_gallery.js +135 -131
  15. package/examples/test_gallery.tsx +9 -8
  16. package/examples/test_react_lazy.js +130 -128
  17. package/examples/test_react_lazy.tsx +7 -6
  18. package/examples/test_react_listbox.js +130 -128
  19. package/examples/test_react_listbox.tsx +8 -7
  20. package/examples/test_root_window.js +130 -128
  21. package/examples/test_root_window.tsx +5 -5
  22. package/examples/test_tab.js +130 -128
  23. package/examples/test_tab.tsx +7 -6
  24. package/examples/tray_demo.js +8 -8
  25. package/examples/tray_demo.tsx +9 -8
  26. package/lib/dumpRects.js +2 -2
  27. package/lib/dumpRects.ts +3 -2
  28. package/lib/fetch.js +15 -15
  29. package/lib/fetch.ts +16 -15
  30. package/lib/ffi/bind.js +3 -3
  31. package/lib/ffi/bind.ts +3 -3
  32. package/lib/ffi/ctype.ts +3 -1
  33. package/lib/ffi/struct.js +23 -7
  34. package/lib/ffi/struct.ts +50 -23
  35. package/lib/http-server.js +5 -5
  36. package/lib/http-server.ts +6 -5
  37. package/lib/react-qw/components/Button.js +2 -2
  38. package/lib/react-qw/components/CheckBox.js +4 -4
  39. package/lib/react-qw/components/ComboBox.js +10 -10
  40. package/lib/react-qw/components/DateTimePicker.js +12 -12
  41. package/lib/react-qw/components/Input.js +7 -7
  42. package/lib/react-qw/components/Link.js +4 -4
  43. package/lib/react-qw/components/ListBox.js +12 -12
  44. package/lib/react-qw/components/ListView.js +35 -35
  45. package/lib/react-qw/components/PathPicker.js +3 -3
  46. package/lib/react-qw/components/ProgressBar.js +4 -4
  47. package/lib/react-qw/components/RadioButton.js +4 -4
  48. package/lib/react-qw/components/ScrollView.js +28 -28
  49. package/lib/react-qw/components/Slider.js +11 -11
  50. package/lib/react-qw/components/Tab.js +10 -10
  51. package/lib/react-qw/components/Tooltip.js +8 -8
  52. package/lib/react-qw/components/TreeView.js +20 -20
  53. package/lib/react-qw/index.js +5 -5
  54. package/lib/react-qw/index.ts +6 -5
  55. package/lib/react-qw/props.js +4 -4
  56. package/lib/react-qw/props.ts +5 -4
  57. package/lib/react-qw/reconciler.js +10 -10
  58. package/lib/react-qw/reconciler.ts +11 -10
  59. package/lib/text-measure.js +3 -3
  60. package/lib/text-measure.ts +4 -3
  61. package/lib/websocket.js +17 -17
  62. package/lib/websocket.ts +18 -17
  63. package/lib/windows/advapi32.js +7 -7
  64. package/lib/windows/advapi32.ts +7 -7
  65. package/lib/windows/gdi32.js +17 -17
  66. package/lib/windows/gdi32.ts +17 -17
  67. package/lib/windows/kernel32.js +41 -2
  68. package/lib/windows/kernel32.ts +45 -2
  69. package/lib/windows/shell32.js +24 -3
  70. package/lib/windows/shell32.ts +27 -4
  71. package/lib/windows/structs.js +230 -92
  72. package/lib/windows/structs.ts +278 -92
  73. package/lib/windows/user32.js +18 -6
  74. package/lib/windows/user32.ts +18 -6
  75. package/lib/windows/winspool.js +3 -3
  76. package/lib/windows/winspool.ts +3 -3
  77. package/package.json +4 -3
  78. package/quickwin.d.ts +32 -10
  79. package/qwin-nowasm-x86.exe +0 -0
  80. package/qwin-nowasm.exe +0 -0
  81. package/qwin-x86.exe +0 -0
  82. package/qwin.exe +0 -0
  83. package/test/test_ffi_bind.js +12 -10
  84. package/test/test_ffi_bind.ts +14 -12
  85. package/test/test_ffi_struct.js +60 -26
  86. package/test/test_ffi_struct.ts +58 -28
  87. package/test/test_ffi_windows.js +1 -1
  88. package/test/test_ffi_windows.ts +1 -1
  89. package/test/test_files.js +7 -7
  90. package/test/test_files.ts +8 -8
  91. package/test/test_gdi_draw.js +51 -51
  92. package/test/test_gdi_draw.ts +57 -57
  93. package/test/test_http_server.js +3 -3
  94. package/test/test_http_server.ts +4 -3
  95. package/test/test_ipv6.js +3 -3
  96. package/test/test_ipv6.ts +4 -3
  97. package/test/test_net_event.js +3 -3
  98. package/test/test_net_event.ts +4 -3
  99. package/test/test_printer.js +4 -4
  100. package/test/test_printer.ts +5 -5
  101. package/test/test_react_complex.js +132 -130
  102. package/test/test_react_counter.js +130 -128
  103. package/test/test_react_flex.js +132 -130
  104. package/test/test_react_hidden.js +130 -128
  105. package/test/test_react_listview_link.js +131 -129
  106. package/test/test_react_notify.js +148 -146
  107. package/test/test_react_render.js +130 -128
  108. package/test/test_registry.js +6 -6
  109. package/test/test_registry.ts +8 -8
  110. package/test/test_wolfssl_read.js +8 -8
  111. package/test/test_wolfssl_read.ts +9 -8
  112. package/examples/exec_server.tsx +0 -488
  113. package/examples/exec_server_worker.js +0 -395
  114. package/examples/exec_server_worker.ts +0 -417
  115. package/examples/setres.js +0 -79
  116. package/examples/setres.ts +0 -86
  117. package/quickwin_const.d.ts +0 -1037
package/lib/websocket.js CHANGED
@@ -273,16 +273,16 @@ class WebSocketImpl {
273
273
  if (this._processingHandshake)
274
274
  return;
275
275
  if (resolved && state === 'open') {
276
- if (event.lNetworkEvents & 1 /* sock.FdEvent.FD_READ */) {
276
+ if (event.lNetworkEvents & 1 /* FdEvent.FD_READ */) {
277
277
  this._onData();
278
278
  }
279
- if (event.lNetworkEvents & 32 /* sock.FdEvent.FD_CLOSE */) {
279
+ if (event.lNetworkEvents & 32 /* FdEvent.FD_CLOSE */) {
280
280
  this._cleanup();
281
281
  this._setState(State.CLOSED);
282
282
  }
283
283
  return;
284
284
  }
285
- if (event.lNetworkEvents & 16 /* sock.FdEvent.FD_CONNECT */) {
285
+ if (event.lNetworkEvents & 16 /* FdEvent.FD_CONNECT */) {
286
286
  const errCode = event.iErrorCode[0];
287
287
  if (errCode !== 0) {
288
288
  doError(new Error('Connection failed: ' + errCode));
@@ -296,10 +296,10 @@ class WebSocketImpl {
296
296
  return;
297
297
  }
298
298
  if (this._options.rejectUnauthorized === false) {
299
- wolfssl.wolfSSL_CTX_set_verify(this._ctx, 0 /* wolfssl.VerifyMode.SSL_VERIFY_NONE */);
299
+ wolfssl.wolfSSL_CTX_set_verify(this._ctx, 0 /* VerifyMode.SSL_VERIFY_NONE */);
300
300
  }
301
301
  else {
302
- wolfssl.wolfSSL_CTX_set_verify(this._ctx, 1 /* wolfssl.VerifyMode.SSL_VERIFY_PEER */);
302
+ wolfssl.wolfSSL_CTX_set_verify(this._ctx, 1 /* VerifyMode.SSL_VERIFY_PEER */);
303
303
  wolfssl.loadTrustedCerts(this._ctx);
304
304
  }
305
305
  this._ssl = wolfssl.wolfSSL_new(this._ctx);
@@ -310,7 +310,7 @@ class WebSocketImpl {
310
310
  wolfssl.wolfSSL_set_fd(this._ssl, sock.get_fd(fd));
311
311
  const sniHost = host;
312
312
  if (sniHost) {
313
- wolfssl.wolfSSL_UseSNI(this._ssl, 0 /* wolfssl.SniType.WOLFSSL_SNI_HOST_NAME */, sniHost);
313
+ wolfssl.wolfSSL_UseSNI(this._ssl, 0 /* SniType.WOLFSSL_SNI_HOST_NAME */, sniHost);
314
314
  if (this._options.rejectUnauthorized !== false) {
315
315
  wolfssl.wolfSSL_check_domain_name(this._ssl, sniHost);
316
316
  }
@@ -322,21 +322,21 @@ class WebSocketImpl {
322
322
  state = 'request';
323
323
  }
324
324
  }
325
- if ((event.lNetworkEvents & 1 /* sock.FdEvent.FD_READ */) || (event.lNetworkEvents & 2 /* sock.FdEvent.FD_WRITE */)) {
325
+ if ((event.lNetworkEvents & 1 /* FdEvent.FD_READ */) || (event.lNetworkEvents & 2 /* FdEvent.FD_WRITE */)) {
326
326
  if (state === 'handshake') {
327
327
  if (!this._ssl) {
328
328
  doError(new Error('TLS not initialized'));
329
329
  return;
330
330
  }
331
331
  const ret = wolfssl.wolfSSL_connect(this._ssl);
332
- if (ret === 1 /* wolfssl.ReturnCode.SSL_SUCCESS */) {
332
+ if (ret === 1 /* ReturnCode.SSL_SUCCESS */) {
333
333
  this._sendRawStr(request);
334
334
  state = 'request';
335
335
  }
336
336
  else {
337
337
  const err = wolfssl.wolfSSL_get_error(this._ssl, ret);
338
- if (err !== 2 /* wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_READ */ &&
339
- err !== 3 /* wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_WRITE */) {
338
+ if (err !== 2 /* WolfsslErrorCode.WOLFSSL_ERROR_WANT_READ */ &&
339
+ err !== 3 /* WolfsslErrorCode.WOLFSSL_ERROR_WANT_WRITE */) {
340
340
  doError(new Error('TLS handshake failed: ' + err));
341
341
  }
342
342
  }
@@ -352,10 +352,10 @@ class WebSocketImpl {
352
352
  }
353
353
  else {
354
354
  const err = wolfssl.wolfSSL_get_error(this._ssl, n);
355
- if (err === 2 /* wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_READ */ ||
356
- err === 3 /* wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_WRITE */)
355
+ if (err === 2 /* WolfsslErrorCode.WOLFSSL_ERROR_WANT_READ */ ||
356
+ err === 3 /* WolfsslErrorCode.WOLFSSL_ERROR_WANT_WRITE */)
357
357
  break;
358
- if (n === 0 || err === 6 /* wolfssl.ErrorCode.WOLFSSL_ERROR_ZERO_RETURN */)
358
+ if (n === 0 || err === 6 /* WolfsslErrorCode.WOLFSSL_ERROR_ZERO_RETURN */)
359
359
  break;
360
360
  doError(new Error('TLS read failed: ' + err));
361
361
  return;
@@ -417,7 +417,7 @@ class WebSocketImpl {
417
417
  }
418
418
  }
419
419
  }
420
- if (event.lNetworkEvents & 32 /* sock.FdEvent.FD_CLOSE */) {
420
+ if (event.lNetworkEvents & 32 /* FdEvent.FD_CLOSE */) {
421
421
  if (state !== 'open') {
422
422
  doError(new Error('Connection closed'));
423
423
  }
@@ -464,10 +464,10 @@ class WebSocketImpl {
464
464
  }
465
465
  else {
466
466
  const err = wolfssl.wolfSSL_get_error(this._ssl, n);
467
- if (err === 2 /* wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_READ */ ||
468
- err === 3 /* wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_WRITE */)
467
+ if (err === 2 /* WolfsslErrorCode.WOLFSSL_ERROR_WANT_READ */ ||
468
+ err === 3 /* WolfsslErrorCode.WOLFSSL_ERROR_WANT_WRITE */)
469
469
  break;
470
- if (n === 0 || err === 6 /* wolfssl.ErrorCode.WOLFSSL_ERROR_ZERO_RETURN */)
470
+ if (n === 0 || err === 6 /* WolfsslErrorCode.WOLFSSL_ERROR_ZERO_RETURN */)
471
471
  break;
472
472
  this._fireError(new Error('TLS read failed: ' + err));
473
473
  if (this._state !== State.CLOSED)
package/lib/websocket.ts CHANGED
@@ -2,6 +2,7 @@ import '../lib/polyfill.js'
2
2
  import * as sock from 'sock'
3
3
  import * as wolfssl from 'wolfssl'
4
4
  import * as os from 'os'
5
+ import { FdEvent, ReturnCode, SniType, VerifyMode, WolfsslErrorCode } from '../constants'
5
6
 
6
7
  // ── Constants ──
7
8
 
@@ -301,17 +302,17 @@ class WebSocketImpl {
301
302
  sock.set_on_event(fd, async (event: { lNetworkEvents: number; iErrorCode: number[] }) => {
302
303
  if (this._processingHandshake) return
303
304
  if (resolved && state === 'open') {
304
- if (event.lNetworkEvents & sock.FdEvent.FD_READ) {
305
+ if (event.lNetworkEvents & FdEvent.FD_READ) {
305
306
  this._onData()
306
307
  }
307
- if (event.lNetworkEvents & sock.FdEvent.FD_CLOSE) {
308
+ if (event.lNetworkEvents & FdEvent.FD_CLOSE) {
308
309
  this._cleanup()
309
310
  this._setState(State.CLOSED)
310
311
  }
311
312
  return
312
313
  }
313
314
 
314
- if (event.lNetworkEvents & sock.FdEvent.FD_CONNECT) {
315
+ if (event.lNetworkEvents & FdEvent.FD_CONNECT) {
315
316
  const errCode = event.iErrorCode[0]
316
317
  if (errCode !== 0) {
317
318
  doError(new Error('Connection failed: ' + errCode))
@@ -322,9 +323,9 @@ class WebSocketImpl {
322
323
  this._ctx = wolfssl.wolfSSL_CTX_new(method)
323
324
  if (!this._ctx) { doError(new Error('SSL_CTX_new failed')); return }
324
325
  if (this._options.rejectUnauthorized === false) {
325
- wolfssl.wolfSSL_CTX_set_verify(this._ctx, wolfssl.VerifyMode.SSL_VERIFY_NONE)
326
+ wolfssl.wolfSSL_CTX_set_verify(this._ctx, VerifyMode.SSL_VERIFY_NONE)
326
327
  } else {
327
- wolfssl.wolfSSL_CTX_set_verify(this._ctx, wolfssl.VerifyMode.SSL_VERIFY_PEER)
328
+ wolfssl.wolfSSL_CTX_set_verify(this._ctx, VerifyMode.SSL_VERIFY_PEER)
328
329
  wolfssl.loadTrustedCerts(this._ctx)
329
330
  }
330
331
  this._ssl = wolfssl.wolfSSL_new(this._ctx)
@@ -332,7 +333,7 @@ class WebSocketImpl {
332
333
  wolfssl.wolfSSL_set_fd(this._ssl, sock.get_fd(fd))
333
334
  const sniHost = host
334
335
  if (sniHost) {
335
- wolfssl.wolfSSL_UseSNI(this._ssl, wolfssl.SniType.WOLFSSL_SNI_HOST_NAME, sniHost)
336
+ wolfssl.wolfSSL_UseSNI(this._ssl, SniType.WOLFSSL_SNI_HOST_NAME, sniHost)
336
337
  if (this._options.rejectUnauthorized !== false) {
337
338
  wolfssl.wolfSSL_check_domain_name(this._ssl, sniHost)
338
339
  }
@@ -344,17 +345,17 @@ class WebSocketImpl {
344
345
  }
345
346
  }
346
347
 
347
- if ((event.lNetworkEvents & sock.FdEvent.FD_READ) || (event.lNetworkEvents & sock.FdEvent.FD_WRITE)) {
348
+ if ((event.lNetworkEvents & FdEvent.FD_READ) || (event.lNetworkEvents & FdEvent.FD_WRITE)) {
348
349
  if (state === 'handshake') {
349
350
  if (!this._ssl) { doError(new Error('TLS not initialized')); return }
350
351
  const ret = wolfssl.wolfSSL_connect(this._ssl)
351
- if (ret === wolfssl.ReturnCode.SSL_SUCCESS) {
352
+ if (ret === ReturnCode.SSL_SUCCESS) {
352
353
  this._sendRawStr(request)
353
354
  state = 'request'
354
355
  } else {
355
356
  const err = wolfssl.wolfSSL_get_error(this._ssl, ret)
356
- if (err !== wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_READ &&
357
- err !== wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_WRITE) {
357
+ if (err !== WolfsslErrorCode.WOLFSSL_ERROR_WANT_READ &&
358
+ err !== WolfsslErrorCode.WOLFSSL_ERROR_WANT_WRITE) {
358
359
  doError(new Error('TLS handshake failed: ' + err))
359
360
  }
360
361
  }
@@ -369,9 +370,9 @@ class WebSocketImpl {
369
370
  data = buf.slice(0, n)
370
371
  } else {
371
372
  const err = wolfssl.wolfSSL_get_error(this._ssl, n)
372
- if (err === wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_READ ||
373
- err === wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_WRITE) break
374
- if (n === 0 || err === wolfssl.ErrorCode.WOLFSSL_ERROR_ZERO_RETURN) break
373
+ if (err === WolfsslErrorCode.WOLFSSL_ERROR_WANT_READ ||
374
+ err === WolfsslErrorCode.WOLFSSL_ERROR_WANT_WRITE) break
375
+ if (n === 0 || err === WolfsslErrorCode.WOLFSSL_ERROR_ZERO_RETURN) break
375
376
  doError(new Error('TLS read failed: ' + err))
376
377
  return
377
378
  }
@@ -431,7 +432,7 @@ class WebSocketImpl {
431
432
  }
432
433
  }
433
434
 
434
- if (event.lNetworkEvents & sock.FdEvent.FD_CLOSE) {
435
+ if (event.lNetworkEvents & FdEvent.FD_CLOSE) {
435
436
  if (state !== 'open') {
436
437
  doError(new Error('Connection closed'))
437
438
  }
@@ -477,9 +478,9 @@ class WebSocketImpl {
477
478
  data = buf.slice(0, n)
478
479
  } else {
479
480
  const err = wolfssl.wolfSSL_get_error(this._ssl, n)
480
- if (err === wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_READ ||
481
- err === wolfssl.ErrorCode.WOLFSSL_ERROR_WANT_WRITE) break
482
- if (n === 0 || err === wolfssl.ErrorCode.WOLFSSL_ERROR_ZERO_RETURN) break
481
+ if (err === WolfsslErrorCode.WOLFSSL_ERROR_WANT_READ ||
482
+ err === WolfsslErrorCode.WOLFSSL_ERROR_WANT_WRITE) break
483
+ if (n === 0 || err === WolfsslErrorCode.WOLFSSL_ERROR_ZERO_RETURN) break
483
484
  this._fireError(new Error('TLS read failed: ' + err))
484
485
  if (this._state !== State.CLOSED) this._setState(State.CLOSED)
485
486
  return
@@ -4,13 +4,13 @@ import { bind } from '../ffi/bind.js';
4
4
  const b = (name, sig) => bind('advapi32.dll', name, sig);
5
5
  /** 创建/打开子键(子键不存在则创建,含中间层级)
6
6
  * @returns 0 = ERROR_SUCCESS
7
- * @param args_0 hKey 父键:gui.HKey.CURRENT_USER / LOCAL_MACHINE 预定义键,或本族
7
+ * @param args_0 hKey 父键:HKey.CURRENT_USER / LOCAL_MACHINE 预定义键,或本族
8
8
  * Open/Create 返回的真实句柄(此位双来源,不标 @HKey——裸位收两种)
9
9
  * @param args_1 lpSubKey 子键路径('Software\\X\\Y',可 NULL = 打开 hKey 自身副本)
10
10
  * @param args_2 Reserved 保留,恒 0
11
11
  * @param args_3 lpClass 键类名(一般 NULL)
12
12
  * @param args_4 dwOptions 保留属性(恒 0)
13
- * @param args_5 samDesired 访问掩码 gui.RegAccess.READ / SET_VALUE(标准组合常量按成员收录)
13
+ * @param args_5 samDesired 访问掩码 RegAccess.READ / SET_VALUE(标准组合常量按成员收录)
14
14
  * @param args_6 lpSecurityAttributes 安全描述符(一般 NULL)
15
15
  * @param args_7 phkResult 出参:键句柄(PtrArrayBuffer(8),readPtr 按架构读回)
16
16
  * @param args_8 lpdwDisposition 出参:新建/已存在标记(可 NULL) */
@@ -20,7 +20,7 @@ export const RegCreateKeyEx = /*@__PURE__*/ b('RegCreateKeyExW', '<>ptr <WCHAR>p
20
20
  * @param args_0 hKey 父键(同 RegCreateKeyEx 的双来源语义)
21
21
  * @param args_1 lpSubKey 子键路径(NULL = 打开 hKey 自身副本)
22
22
  * @param args_2 ulOptions 保留,恒 0
23
- * @param args_3 samDesired 访问掩码 gui.RegAccess.READ / SET_VALUE
23
+ * @param args_3 samDesired 访问掩码 RegAccess.READ / SET_VALUE
24
24
  * @param args_4 phkResult 出参:键句柄 */
25
25
  export const RegOpenKeyEx = /*@__PURE__*/ b('RegOpenKeyExW', '<>ptr <WCHAR>ptr u32 u32@RegAccess <BYTE>ptr -> i32');
26
26
  /** 关闭键句柄;只关 Open/Create 返回的真实句柄——预定义键(HKEY_CURRENT_USER 等)
@@ -29,16 +29,16 @@ export const RegOpenKeyEx = /*@__PURE__*/ b('RegOpenKeyExW', '<>ptr <WCHAR>ptr u
29
29
  export const RegCloseKey = /*@__PURE__*/ b('RegCloseKey', '<>ptr -> i32');
30
30
  /** 写键值
31
31
  * @returns 0 = ERROR_SUCCESS
32
- * @param args_0 hKey 键句柄(须 KEY_SET_VALUE 权限,含于 gui.RegAccess.SET_VALUE)
32
+ * @param args_0 hKey 键句柄(须 KEY_SET_VALUE 权限,含于 RegAccess.SET_VALUE)
33
33
  * @param args_1 lpValueName 值名(NULL = 键的默认值)
34
34
  * @param args_2 Reserved 保留,恒 0
35
- * @param args_3 dwType 值类型 gui.RegType.SZ(UTF-16 字符串)
35
+ * @param args_3 dwType 值类型 RegType.SZ(UTF-16 字符串)
36
36
  * @param args_4 lpData 数据缓冲(REG_SZ:UTF-16LE 含结尾 NUL)
37
37
  * @param args_5 cbData 数据字节数(REG_SZ = (字符数+1)*2) */
38
38
  export const RegSetValueEx = /*@__PURE__*/ b('RegSetValueExW', '<>ptr <WCHAR>ptr u32 u32@RegType <BYTE>ptr u32 -> i32');
39
39
  /** 读键值(两跳模式:第一跳 lpData=NULL 取尺寸/类型,第二跳按尺寸带缓冲读数据)
40
40
  * @returns 0 = ERROR_SUCCESS;2 = ERROR_FILE_NOT_FOUND(值不存在)
41
- * @param args_0 hKey 键句柄(须 KEY_QUERY_VALUE 权限,含于 gui.RegAccess.READ)
41
+ * @param args_0 hKey 键句柄(须 KEY_QUERY_VALUE 权限,含于 RegAccess.READ)
42
42
  * @param args_1 lpValueName 值名(NULL = 键的默认值)
43
43
  * @param args_2 lpReserved 保留,恒 NULL
44
44
  * @param args_3 lpType 出参:值类型(可 NULL)
@@ -46,7 +46,7 @@ export const RegSetValueEx = /*@__PURE__*/ b('RegSetValueExW', '<>ptr <WCHAR>ptr
46
46
  * @param args_5 lpcbData 双向:入 = lpData 缓冲字节数(须预写)、出 = 实际字节数 */
47
47
  export const RegQueryValueEx = /*@__PURE__*/ b('RegQueryValueExW', '<>ptr <WCHAR>ptr <>ptr <BYTE>ptr <BYTE>ptr <BYTE>ptr -> i32');
48
48
  /** 删除子键(连值一起删);须父键 KEY_CREATE_SUB_KEY 权限——自己的 HKCU 直接传
49
- * gui.HKey.CURRENT_USER 即可
49
+ * HKey.CURRENT_USER 即可
50
50
  * @returns 0 = ERROR_SUCCESS;2 = 子键不存在
51
51
  * @param args_0 hKey 父键
52
52
  * @param args_1 lpSubKey 要删的子键路径(不可 NULL) */
@@ -6,13 +6,13 @@ const b = <const S extends string>(name: string, sig: S) => bind('advapi32.dll',
6
6
 
7
7
  /** 创建/打开子键(子键不存在则创建,含中间层级)
8
8
  * @returns 0 = ERROR_SUCCESS
9
- * @param args_0 hKey 父键:gui.HKey.CURRENT_USER / LOCAL_MACHINE 预定义键,或本族
9
+ * @param args_0 hKey 父键:HKey.CURRENT_USER / LOCAL_MACHINE 预定义键,或本族
10
10
  * Open/Create 返回的真实句柄(此位双来源,不标 @HKey——裸位收两种)
11
11
  * @param args_1 lpSubKey 子键路径('Software\\X\\Y',可 NULL = 打开 hKey 自身副本)
12
12
  * @param args_2 Reserved 保留,恒 0
13
13
  * @param args_3 lpClass 键类名(一般 NULL)
14
14
  * @param args_4 dwOptions 保留属性(恒 0)
15
- * @param args_5 samDesired 访问掩码 gui.RegAccess.READ / SET_VALUE(标准组合常量按成员收录)
15
+ * @param args_5 samDesired 访问掩码 RegAccess.READ / SET_VALUE(标准组合常量按成员收录)
16
16
  * @param args_6 lpSecurityAttributes 安全描述符(一般 NULL)
17
17
  * @param args_7 phkResult 出参:键句柄(PtrArrayBuffer(8),readPtr 按架构读回)
18
18
  * @param args_8 lpdwDisposition 出参:新建/已存在标记(可 NULL) */
@@ -24,7 +24,7 @@ export const RegCreateKeyEx = /*@__PURE__*/ b('RegCreateKeyExW',
24
24
  * @param args_0 hKey 父键(同 RegCreateKeyEx 的双来源语义)
25
25
  * @param args_1 lpSubKey 子键路径(NULL = 打开 hKey 自身副本)
26
26
  * @param args_2 ulOptions 保留,恒 0
27
- * @param args_3 samDesired 访问掩码 gui.RegAccess.READ / SET_VALUE
27
+ * @param args_3 samDesired 访问掩码 RegAccess.READ / SET_VALUE
28
28
  * @param args_4 phkResult 出参:键句柄 */
29
29
  export const RegOpenKeyEx = /*@__PURE__*/ b('RegOpenKeyExW',
30
30
  '<>ptr <WCHAR>ptr u32 u32@RegAccess <BYTE>ptr -> i32')
@@ -36,10 +36,10 @@ export const RegCloseKey = /*@__PURE__*/ b('RegCloseKey', '<>ptr -> i32')
36
36
 
37
37
  /** 写键值
38
38
  * @returns 0 = ERROR_SUCCESS
39
- * @param args_0 hKey 键句柄(须 KEY_SET_VALUE 权限,含于 gui.RegAccess.SET_VALUE)
39
+ * @param args_0 hKey 键句柄(须 KEY_SET_VALUE 权限,含于 RegAccess.SET_VALUE)
40
40
  * @param args_1 lpValueName 值名(NULL = 键的默认值)
41
41
  * @param args_2 Reserved 保留,恒 0
42
- * @param args_3 dwType 值类型 gui.RegType.SZ(UTF-16 字符串)
42
+ * @param args_3 dwType 值类型 RegType.SZ(UTF-16 字符串)
43
43
  * @param args_4 lpData 数据缓冲(REG_SZ:UTF-16LE 含结尾 NUL)
44
44
  * @param args_5 cbData 数据字节数(REG_SZ = (字符数+1)*2) */
45
45
  export const RegSetValueEx = /*@__PURE__*/ b('RegSetValueExW',
@@ -47,7 +47,7 @@ export const RegSetValueEx = /*@__PURE__*/ b('RegSetValueExW',
47
47
 
48
48
  /** 读键值(两跳模式:第一跳 lpData=NULL 取尺寸/类型,第二跳按尺寸带缓冲读数据)
49
49
  * @returns 0 = ERROR_SUCCESS;2 = ERROR_FILE_NOT_FOUND(值不存在)
50
- * @param args_0 hKey 键句柄(须 KEY_QUERY_VALUE 权限,含于 gui.RegAccess.READ)
50
+ * @param args_0 hKey 键句柄(须 KEY_QUERY_VALUE 权限,含于 RegAccess.READ)
51
51
  * @param args_1 lpValueName 值名(NULL = 键的默认值)
52
52
  * @param args_2 lpReserved 保留,恒 NULL
53
53
  * @param args_3 lpType 出参:值类型(可 NULL)
@@ -57,7 +57,7 @@ export const RegQueryValueEx = /*@__PURE__*/ b('RegQueryValueExW',
57
57
  '<>ptr <WCHAR>ptr <>ptr <BYTE>ptr <BYTE>ptr <BYTE>ptr -> i32')
58
58
 
59
59
  /** 删除子键(连值一起删);须父键 KEY_CREATE_SUB_KEY 权限——自己的 HKCU 直接传
60
- * gui.HKey.CURRENT_USER 即可
60
+ * HKey.CURRENT_USER 即可
61
61
  * @returns 0 = ERROR_SUCCESS;2 = 子键不存在
62
62
  * @param args_0 hKey 父键
63
63
  * @param args_1 lpSubKey 要删的子键路径(不可 NULL) */
@@ -12,7 +12,7 @@ import { LOGFONTW, POINT, RECT } from './structs.js';
12
12
  const b = (name, sig, encoders) => bind('gdi32.dll', name, sig, encoders);
13
13
  // 点数组编解码对(Polyline/Polygon/PlgBlt 共享):注册后 <POINT>ptr 位收元素数组
14
14
  // (值域由 encoder 推导),C 侧 NULL 位传 NULL(number 直通),[]/单对象 fail-loud
15
- const POINTArr = structArray(POINT);
15
+ const POINTArr = /*@__PURE__*/ structArray(POINT);
16
16
  /** 创建实心画刷;配对 DeleteObject
17
17
  * @returns 失败 → 0
18
18
  * @param args_0 crColor 画刷颜色 0x00BBGGRR */
@@ -68,7 +68,7 @@ export const SelectObject = /*@__PURE__*/ b('SelectObject', '<HDC>ptr! <HGDIOBJ>
68
68
  * @param args_5 hdcSrc 源 DC
69
69
  * @param args_6 x1 源起始 x
70
70
  * @param args_7 y1 源起始 y
71
- * @param args_8 dwRop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码(标 @ 枚举拦手误值) */
71
+ * @param args_8 dwRop RasterOp.SRCCOPY 等互斥单选光栅操作码(标 @ 枚举拦手误值) */
72
72
  // hdcDest 非空(!);hdcSrc 在 PATCOPY 等特定 rop 下 C 允许 NULL,保持可空档。
73
73
  export const BitBlt = /*@__PURE__*/ b('BitBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 u32@RasterOp -> i32');
74
74
  /** 取位图像素到 lpvBits(lpbmi 为 BITMAPINFO,32bpp BI_RGB 无颜色表时头部即全部:
@@ -99,7 +99,7 @@ export const DeleteDC = /*@__PURE__*/ b('DeleteDC', '<HDC>ptr! -> i32');
99
99
  * @param args_2 y 左上角 y
100
100
  * @param args_3 w 宽度
101
101
  * @param args_4 h 高度
102
- * @param args_5 rop gui.RasterOp.PATCOPY / WHITENESS 等互斥单选光栅操作码 */
102
+ * @param args_5 rop RasterOp.PATCOPY / WHITENESS 等互斥单选光栅操作码 */
103
103
  export const PatBlt = /*@__PURE__*/ b('PatBlt', '<HDC>ptr! i32 i32 i32 i32 u32@RasterOp -> i32');
104
104
  /** 拉伸位图传送(源区 wSrc×hSrc 放/缩到目标 wDest×hDest)
105
105
  * @returns 成功 → 非 0
@@ -113,15 +113,15 @@ export const PatBlt = /*@__PURE__*/ b('PatBlt', '<HDC>ptr! i32 i32 i32 i32 u32@R
113
113
  * @param args_7 ySrc 源区左上 y
114
114
  * @param args_8 wSrc 源区宽
115
115
  * @param args_9 hSrc 源区高
116
- * @param args_10 dwRop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码 */
116
+ * @param args_10 dwRop RasterOp.SRCCOPY 等互斥单选光栅操作码 */
117
117
  export const StretchBlt = /*@__PURE__*/ b('StretchBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 i32 i32 u32@RasterOp -> i32');
118
118
  /** 设置拉伸取色模式;放大时各模式像素同为源色,缩小时降采样策略不同
119
119
  * (DELETESCANS 丢行 / HALFTONE 平均取色最保真)
120
120
  * @returns 旧值
121
121
  * @param args_0 hdc 目标 DC
122
- * @param args_1 iMode gui.StretchBltMode.ANDSCANS(1) / ORSCANS(2) / DELETESCANS(3) / HALFTONE(4) */
122
+ * @param args_1 iMode StretchBltMode.ANDSCANS(1) / ORSCANS(2) / DELETESCANS(3) / HALFTONE(4) */
123
123
  export const SetStretchBltMode = /*@__PURE__*/ b('SetStretchBltMode', '<HDC>ptr! i32@StretchBltMode -> i32');
124
- /** 读拉伸取色模式(值域 = gui.StretchBltMode 成员);回传
124
+ /** 读拉伸取色模式(值域 = StretchBltMode 成员);回传
125
125
  * SetStretchBltMode 前需按成员值使用(裸 number 进不了枚举位)
126
126
  * @returns number */
127
127
  export const GetStretchBltMode = /*@__PURE__*/ b('GetStretchBltMode', '<HDC>ptr! -> i32');
@@ -187,18 +187,18 @@ export const SetDIBitsToDevice = /*@__PURE__*/ b('SetDIBitsToDevice', '<HDC>ptr!
187
187
  * @param args_9 lpvBits 像素缓冲(ArrayBuffer)
188
188
  * @param args_10 lpbmi BITMAPINFO 缓冲(BITMAPINFOHEADER.encode({...}).ptr)
189
189
  * @param args_11 iUsage DIB_RGB_COLORS(0)
190
- * @param args_12 rop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码 */
190
+ * @param args_12 rop RasterOp.SRCCOPY 等互斥单选光栅操作码 */
191
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
192
  // ============ 画图原语(笔 / 线 / 形状 / 文字) ============
193
193
  /** 取系统共享对象(笔/刷/字体/调色板);共享句柄不要 DeleteObject——
194
194
  * SelectObject 选入 hdc 生效(如 NULL_BRUSH 让形状只描边不填充)
195
195
  * @returns 失败 → 0
196
- * @param args_0 iObject gui.StockObject.NULL_BRUSH / BLACK_PEN / DEFAULT_GUI_FONT 等 */
196
+ * @param args_0 iObject StockObject.NULL_BRUSH / BLACK_PEN / DEFAULT_GUI_FONT 等 */
197
197
  export const GetStockObject = /*@__PURE__*/ b('GetStockObject', 'i32@StockObject -> <HGDIOBJ>ptr');
198
198
  /** 创建网格纹理画刷(线色 = crColor,间隙 = 背景:SetBkMode=TRANSPARENT 透底、OPAQUE
199
199
  * 用 SetBkColor);配对 DeleteObject
200
200
  * @returns 失败 → 0
201
- * @param args_0 iHatch gui.HatchStyle.HORIZONTAL(横线)/ VERTICAL / FDIAGONAL /
201
+ * @param args_0 iHatch HatchStyle.HORIZONTAL(横线)/ VERTICAL / FDIAGONAL /
202
202
  * BDIAGONAL / CROSS / DIAGCROSS
203
203
  * @param args_1 crColor 纹理线颜色 0x00BBGGRR */
204
204
  export const CreateHatchBrush = /*@__PURE__*/ b('CreateHatchBrush', 'i32@HatchStyle u32 -> <HGDIOBJ>ptr');
@@ -209,14 +209,14 @@ export const CreateHatchBrush = /*@__PURE__*/ b('CreateHatchBrush', 'i32@HatchSt
209
209
  export const CreatePatternBrush = /*@__PURE__*/ b('CreatePatternBrush', '<HGDIOBJ>ptr -> <HGDIOBJ>ptr');
210
210
  /** 创建画笔(选入 hdc 生效,SelectObject 选回旧对象后 DeleteObject 配对)
211
211
  * @returns 失败 → 0
212
- * @param args_0 iStyle 笔型(gui.PenStyle.SOLID / DASH / NULL 等)
212
+ * @param args_0 iStyle 笔型(PenStyle.SOLID / DASH / NULL 等)
213
213
  * @param args_1 cWidth 笔宽(像素;>1 的几何宽设备相关,虚线样式可能被拉伸)
214
214
  * @param args_2 crColor 笔色 0x00BBGGRR */
215
215
  export const CreatePen = /*@__PURE__*/ b('CreatePen', 'i32@PenStyle i32 u32 -> <HGDIOBJ>ptr');
216
216
  /** 设置文字/阴影背景填充模式
217
217
  * @returns 旧模式(新建 DC 默认 OPAQUE)
218
218
  * @param args_0 hdc 目标 DC
219
- * @param args_1 iBkMode gui.BackgroundMode.OPAQUE(衬底填充)/ TRANSPARENT(透明) */
219
+ * @param args_1 iBkMode BackgroundMode.OPAQUE(衬底填充)/ TRANSPARENT(透明) */
220
220
  export const SetBkMode = /*@__PURE__*/ b('SetBkMode', '<HDC>ptr! i32@BackgroundMode -> i32');
221
221
  /** 设置文字颜色
222
222
  * @returns 旧 COLORREF(0x00BBGGRR)
@@ -241,19 +241,19 @@ export const RestoreDC = /*@__PURE__*/ b('RestoreDC', '<HDC>ptr! i32 -> i32');
241
241
  /** 设置多边形填充规则
242
242
  * @returns 旧值(新建 DC 默认 ALTERNATE = 奇偶规则)
243
243
  * @param args_0 hdc 目标 DC
244
- * @param args_1 iMode gui.PolyFillMode.ALTERNATE(自相交区域交替镂空)/
244
+ * @param args_1 iMode PolyFillMode.ALTERNATE(自相交区域交替镂空)/
245
245
  * WINDING(非零环绕,自相交区域整体实心) */
246
246
  export const SetPolyFillMode = /*@__PURE__*/ b('SetPolyFillMode', '<HDC>ptr! i32@PolyFillMode -> i32');
247
247
  /** 设置前景画笔与目的像素的混合方式(二元光栅模式);
248
248
  * R2_XORPEN 可逆(同路径画两次抵消原样),适合橡皮筋交互
249
249
  * @returns 旧值(默认 R2_COPYPEN = 直接画)
250
250
  * @param args_0 hdc 目标 DC
251
- * @param args_1 iMode gui.RasterMode.R2_COPYPEN / R2_XORPEN / R2_NOT 等(单选,标 @ 枚举) */
251
+ * @param args_1 iMode RasterMode.R2_COPYPEN / R2_XORPEN / R2_NOT 等(单选,标 @ 枚举) */
252
252
  export const SetROP2 = /*@__PURE__*/ b('SetROP2', '<HDC>ptr! i32@RasterMode -> i32');
253
253
  /** 设置弧/弦/扇形的扫过方向
254
254
  * @returns 旧值(新 DC 默认逆时针)
255
255
  * @param args_0 hdc 目标 DC
256
- * @param args_1 iDir gui.ArcDirection.COUNTERCLOCKWISE(默认)/ CLOCKWISE */
256
+ * @param args_1 iDir ArcDirection.COUNTERCLOCKWISE(默认)/ CLOCKWISE */
257
257
  export const SetArcDirection = /*@__PURE__*/ b('SetArcDirection', '<HDC>ptr! i32@ArcDirection -> i32');
258
258
  /** 读弧扫过方向
259
259
  * @returns AD_COUNTERCLOCKWISE=1 / AD_CLOCKWISE=2;失败 → 0 */
@@ -358,10 +358,10 @@ export const Pie = /*@__PURE__*/ b('Pie', '<HDC>ptr! i32 i32 i32 i32 i32 i32 i32
358
358
  * @param args_4 c 字符数(= str.length;C 要字符数不是字节数,不含 NUL) */
359
359
  export const TextOut = /*@__PURE__*/ b('TextOutW', '<HDC>ptr! i32 i32 <WCHAR>ptr i32 -> i32');
360
360
  /** 设置 TextOut/ExtTextOut 的对齐与当前位置更新方式;TA_* 按位组合
361
- * (如 gui.TextAlign.TA_CENTER | gui.TextAlign.TA_UPDATECP),故签名保持 u32 不标枚举
361
+ * (如 TextAlign.TA_CENTER | TextAlign.TA_UPDATECP),故签名保持 u32 不标枚举
362
362
  * @returns 旧 flags(新 DC 默认 TA_LEFT|TA_TOP|TA_NOUPDATECP = 0)
363
363
  * @param args_0 hdc 目标 DC
364
- * @param args_1 fMode gui.TextAlign 成员按位或 */
364
+ * @param args_1 fMode TextAlign 成员按位或 */
365
365
  export const SetTextAlign = /*@__PURE__*/ b('SetTextAlign', '<HDC>ptr! u32 -> u32');
366
366
  /** 按当前字体量字符串宽高(不含衬底与额外间距)
367
367
  * @returns 成功 → 非 0
@@ -382,7 +382,7 @@ export const GetTextMetrics = /*@__PURE__*/ b('GetTextMetricsW', '<HDC>ptr! <TEX
382
382
  * @param args_0 hdc 目标 DC
383
383
  * @param args_1 x 起点 x
384
384
  * @param args_2 y 起点 y
385
- * @param args_3 fOptions gui.TextOutOptions.ETO_OPAQUE(矩形填衬底)|
385
+ * @param args_3 fOptions TextOutOptions.ETO_OPAQUE(矩形填衬底)|
386
386
  * ETO_CLIPPED(矩形裁剪字形)按位或(可 0 = 都不用)
387
387
  * @param args_4 lprc ETO_OPAQUE/ETO_CLIPPED 的作用矩形:DeepPartial 对象直传 /
388
388
  * RECT.alloc().ptr / NULL = 整个当前可裁剪区(有 encoder 的纯入参位三形态)
@@ -15,7 +15,7 @@ const b = <const S extends string, const LE extends CodecMap = {}>(name: string,
15
15
 
16
16
  // 点数组编解码对(Polyline/Polygon/PlgBlt 共享):注册后 <POINT>ptr 位收元素数组
17
17
  // (值域由 encoder 推导),C 侧 NULL 位传 NULL(number 直通),[]/单对象 fail-loud
18
- const POINTArr = structArray(POINT)
18
+ const POINTArr = /*@__PURE__*/ structArray(POINT)
19
19
 
20
20
  /** 创建实心画刷;配对 DeleteObject
21
21
  * @returns 失败 → 0
@@ -77,7 +77,7 @@ export const SelectObject = /*@__PURE__*/ b('SelectObject', '<HDC>ptr! <HGDIOBJ>
77
77
  * @param args_5 hdcSrc 源 DC
78
78
  * @param args_6 x1 源起始 x
79
79
  * @param args_7 y1 源起始 y
80
- * @param args_8 dwRop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码(标 @ 枚举拦手误值) */
80
+ * @param args_8 dwRop RasterOp.SRCCOPY 等互斥单选光栅操作码(标 @ 枚举拦手误值) */
81
81
  // hdcDest 非空(!);hdcSrc 在 PATCOPY 等特定 rop 下 C 允许 NULL,保持可空档。
82
82
  export const BitBlt = /*@__PURE__*/ b('BitBlt', '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 u32@RasterOp -> i32')
83
83
  /** 取位图像素到 lpvBits(lpbmi 为 BITMAPINFO,32bpp BI_RGB 无颜色表时头部即全部:
@@ -109,7 +109,7 @@ export const DeleteDC = /*@__PURE__*/ b('DeleteDC', '<HDC>ptr! -> i32')
109
109
  * @param args_2 y 左上角 y
110
110
  * @param args_3 w 宽度
111
111
  * @param args_4 h 高度
112
- * @param args_5 rop gui.RasterOp.PATCOPY / WHITENESS 等互斥单选光栅操作码 */
112
+ * @param args_5 rop RasterOp.PATCOPY / WHITENESS 等互斥单选光栅操作码 */
113
113
  export const PatBlt = /*@__PURE__*/ b('PatBlt', '<HDC>ptr! i32 i32 i32 i32 u32@RasterOp -> i32')
114
114
  /** 拉伸位图传送(源区 wSrc×hSrc 放/缩到目标 wDest×hDest)
115
115
  * @returns 成功 → 非 0
@@ -123,16 +123,16 @@ export const PatBlt = /*@__PURE__*/ b('PatBlt', '<HDC>ptr! i32 i32 i32 i32 u32@R
123
123
  * @param args_7 ySrc 源区左上 y
124
124
  * @param args_8 wSrc 源区宽
125
125
  * @param args_9 hSrc 源区高
126
- * @param args_10 dwRop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码 */
126
+ * @param args_10 dwRop RasterOp.SRCCOPY 等互斥单选光栅操作码 */
127
127
  export const StretchBlt = /*@__PURE__*/ b('StretchBlt',
128
128
  '<HDC>ptr! i32 i32 i32 i32 <HDC>ptr i32 i32 i32 i32 u32@RasterOp -> i32')
129
129
  /** 设置拉伸取色模式;放大时各模式像素同为源色,缩小时降采样策略不同
130
130
  * (DELETESCANS 丢行 / HALFTONE 平均取色最保真)
131
131
  * @returns 旧值
132
132
  * @param args_0 hdc 目标 DC
133
- * @param args_1 iMode gui.StretchBltMode.ANDSCANS(1) / ORSCANS(2) / DELETESCANS(3) / HALFTONE(4) */
133
+ * @param args_1 iMode StretchBltMode.ANDSCANS(1) / ORSCANS(2) / DELETESCANS(3) / HALFTONE(4) */
134
134
  export const SetStretchBltMode = /*@__PURE__*/ b('SetStretchBltMode', '<HDC>ptr! i32@StretchBltMode -> i32')
135
- /** 读拉伸取色模式(值域 = gui.StretchBltMode 成员);回传
135
+ /** 读拉伸取色模式(值域 = StretchBltMode 成员);回传
136
136
  * SetStretchBltMode 前需按成员值使用(裸 number 进不了枚举位)
137
137
  * @returns number */
138
138
  export const GetStretchBltMode = /*@__PURE__*/ b('GetStretchBltMode', '<HDC>ptr! -> i32')
@@ -202,7 +202,7 @@ export const SetDIBitsToDevice = /*@__PURE__*/ b('SetDIBitsToDevice',
202
202
  * @param args_9 lpvBits 像素缓冲(ArrayBuffer)
203
203
  * @param args_10 lpbmi BITMAPINFO 缓冲(BITMAPINFOHEADER.encode({...}).ptr)
204
204
  * @param args_11 iUsage DIB_RGB_COLORS(0)
205
- * @param args_12 rop gui.RasterOp.SRCCOPY 等互斥单选光栅操作码 */
205
+ * @param args_12 rop RasterOp.SRCCOPY 等互斥单选光栅操作码 */
206
206
  export const StretchDIBits = /*@__PURE__*/ b('StretchDIBits',
207
207
  '<HDC>ptr! i32 i32 i32 i32 i32 i32 i32 i32 <BYTE>ptr <BYTE>ptr u32 u32@RasterOp -> i32')
208
208
 
@@ -211,13 +211,13 @@ export const StretchDIBits = /*@__PURE__*/ b('StretchDIBits',
211
211
  /** 取系统共享对象(笔/刷/字体/调色板);共享句柄不要 DeleteObject——
212
212
  * SelectObject 选入 hdc 生效(如 NULL_BRUSH 让形状只描边不填充)
213
213
  * @returns 失败 → 0
214
- * @param args_0 iObject gui.StockObject.NULL_BRUSH / BLACK_PEN / DEFAULT_GUI_FONT 等 */
214
+ * @param args_0 iObject StockObject.NULL_BRUSH / BLACK_PEN / DEFAULT_GUI_FONT 等 */
215
215
  export const GetStockObject = /*@__PURE__*/ b('GetStockObject', 'i32@StockObject -> <HGDIOBJ>ptr')
216
216
 
217
217
  /** 创建网格纹理画刷(线色 = crColor,间隙 = 背景:SetBkMode=TRANSPARENT 透底、OPAQUE
218
218
  * 用 SetBkColor);配对 DeleteObject
219
219
  * @returns 失败 → 0
220
- * @param args_0 iHatch gui.HatchStyle.HORIZONTAL(横线)/ VERTICAL / FDIAGONAL /
220
+ * @param args_0 iHatch HatchStyle.HORIZONTAL(横线)/ VERTICAL / FDIAGONAL /
221
221
  * BDIAGONAL / CROSS / DIAGCROSS
222
222
  * @param args_1 crColor 纹理线颜色 0x00BBGGRR */
223
223
  export const CreateHatchBrush = /*@__PURE__*/ b('CreateHatchBrush', 'i32@HatchStyle u32 -> <HGDIOBJ>ptr')
@@ -230,14 +230,14 @@ export const CreatePatternBrush = /*@__PURE__*/ b('CreatePatternBrush', '<HGDIOB
230
230
 
231
231
  /** 创建画笔(选入 hdc 生效,SelectObject 选回旧对象后 DeleteObject 配对)
232
232
  * @returns 失败 → 0
233
- * @param args_0 iStyle 笔型(gui.PenStyle.SOLID / DASH / NULL 等)
233
+ * @param args_0 iStyle 笔型(PenStyle.SOLID / DASH / NULL 等)
234
234
  * @param args_1 cWidth 笔宽(像素;>1 的几何宽设备相关,虚线样式可能被拉伸)
235
235
  * @param args_2 crColor 笔色 0x00BBGGRR */
236
236
  export const CreatePen = /*@__PURE__*/ b('CreatePen', 'i32@PenStyle i32 u32 -> <HGDIOBJ>ptr')
237
237
  /** 设置文字/阴影背景填充模式
238
238
  * @returns 旧模式(新建 DC 默认 OPAQUE)
239
239
  * @param args_0 hdc 目标 DC
240
- * @param args_1 iBkMode gui.BackgroundMode.OPAQUE(衬底填充)/ TRANSPARENT(透明) */
240
+ * @param args_1 iBkMode BackgroundMode.OPAQUE(衬底填充)/ TRANSPARENT(透明) */
241
241
  export const SetBkMode = /*@__PURE__*/ b('SetBkMode', '<HDC>ptr! i32@BackgroundMode -> i32')
242
242
  /** 设置文字颜色
243
243
  * @returns 旧 COLORREF(0x00BBGGRR)
@@ -262,19 +262,19 @@ export const RestoreDC = /*@__PURE__*/ b('RestoreDC', '<HDC>ptr! i32 -> i32')
262
262
  /** 设置多边形填充规则
263
263
  * @returns 旧值(新建 DC 默认 ALTERNATE = 奇偶规则)
264
264
  * @param args_0 hdc 目标 DC
265
- * @param args_1 iMode gui.PolyFillMode.ALTERNATE(自相交区域交替镂空)/
265
+ * @param args_1 iMode PolyFillMode.ALTERNATE(自相交区域交替镂空)/
266
266
  * WINDING(非零环绕,自相交区域整体实心) */
267
267
  export const SetPolyFillMode = /*@__PURE__*/ b('SetPolyFillMode', '<HDC>ptr! i32@PolyFillMode -> i32')
268
268
  /** 设置前景画笔与目的像素的混合方式(二元光栅模式);
269
269
  * R2_XORPEN 可逆(同路径画两次抵消原样),适合橡皮筋交互
270
270
  * @returns 旧值(默认 R2_COPYPEN = 直接画)
271
271
  * @param args_0 hdc 目标 DC
272
- * @param args_1 iMode gui.RasterMode.R2_COPYPEN / R2_XORPEN / R2_NOT 等(单选,标 @ 枚举) */
272
+ * @param args_1 iMode RasterMode.R2_COPYPEN / R2_XORPEN / R2_NOT 等(单选,标 @ 枚举) */
273
273
  export const SetROP2 = /*@__PURE__*/ b('SetROP2', '<HDC>ptr! i32@RasterMode -> i32')
274
274
  /** 设置弧/弦/扇形的扫过方向
275
275
  * @returns 旧值(新 DC 默认逆时针)
276
276
  * @param args_0 hdc 目标 DC
277
- * @param args_1 iDir gui.ArcDirection.COUNTERCLOCKWISE(默认)/ CLOCKWISE */
277
+ * @param args_1 iDir ArcDirection.COUNTERCLOCKWISE(默认)/ CLOCKWISE */
278
278
  export const SetArcDirection = /*@__PURE__*/ b('SetArcDirection', '<HDC>ptr! i32@ArcDirection -> i32')
279
279
  /** 读弧扫过方向
280
280
  * @returns AD_COUNTERCLOCKWISE=1 / AD_CLOCKWISE=2;失败 → 0 */
@@ -383,10 +383,10 @@ export const Pie = /*@__PURE__*/ b('Pie', '<HDC>ptr! i32 i32 i32 i32 i32 i32 i32
383
383
  * @param args_4 c 字符数(= str.length;C 要字符数不是字节数,不含 NUL) */
384
384
  export const TextOut = /*@__PURE__*/ b('TextOutW', '<HDC>ptr! i32 i32 <WCHAR>ptr i32 -> i32')
385
385
  /** 设置 TextOut/ExtTextOut 的对齐与当前位置更新方式;TA_* 按位组合
386
- * (如 gui.TextAlign.TA_CENTER | gui.TextAlign.TA_UPDATECP),故签名保持 u32 不标枚举
386
+ * (如 TextAlign.TA_CENTER | TextAlign.TA_UPDATECP),故签名保持 u32 不标枚举
387
387
  * @returns 旧 flags(新 DC 默认 TA_LEFT|TA_TOP|TA_NOUPDATECP = 0)
388
388
  * @param args_0 hdc 目标 DC
389
- * @param args_1 fMode gui.TextAlign 成员按位或 */
389
+ * @param args_1 fMode TextAlign 成员按位或 */
390
390
  export const SetTextAlign = /*@__PURE__*/ b('SetTextAlign', '<HDC>ptr! u32 -> u32')
391
391
  /** 按当前字体量字符串宽高(不含衬底与额外间距)
392
392
  * @returns 成功 → 非 0
@@ -409,7 +409,7 @@ export const GetTextMetrics = /*@__PURE__*/ b('GetTextMetricsW',
409
409
  * @param args_0 hdc 目标 DC
410
410
  * @param args_1 x 起点 x
411
411
  * @param args_2 y 起点 y
412
- * @param args_3 fOptions gui.TextOutOptions.ETO_OPAQUE(矩形填衬底)|
412
+ * @param args_3 fOptions TextOutOptions.ETO_OPAQUE(矩形填衬底)|
413
413
  * ETO_CLIPPED(矩形裁剪字形)按位或(可 0 = 都不用)
414
414
  * @param args_4 lprc ETO_OPAQUE/ETO_CLIPPED 的作用矩形:DeepPartial 对象直传 /
415
415
  * RECT.alloc().ptr / NULL = 整个当前可裁剪区(有 encoder 的纯入参位三形态)