quickwin 2.2.0 → 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 (111) hide show
  1. package/README.en.md +7 -7
  2. package/README.md +7 -7
  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/{execd.js → execd/main.js} +563 -122
  8. package/examples/execd/tray.js +192 -0
  9. package/examples/{execd_worker.js → execd/worker.js} +7 -7
  10. package/examples/pdf_preview2.js +46 -46
  11. package/examples/pdf_preview2.ts +55 -54
  12. package/examples/pdf_viewer.js +34 -19
  13. package/examples/pdf_viewer.tsx +6 -5
  14. package/examples/test_gallery.js +35 -20
  15. package/examples/test_gallery.tsx +9 -8
  16. package/examples/test_react_lazy.js +34 -19
  17. package/examples/test_react_lazy.tsx +7 -6
  18. package/examples/test_react_listbox.js +34 -19
  19. package/examples/test_react_listbox.tsx +8 -7
  20. package/examples/test_root_window.js +34 -19
  21. package/examples/test_root_window.tsx +5 -5
  22. package/examples/test_tab.js +34 -19
  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/http-server.js +4 -4
  33. package/lib/http-server.ts +5 -4
  34. package/lib/react-qw/components/Button.js +2 -2
  35. package/lib/react-qw/components/CheckBox.js +4 -4
  36. package/lib/react-qw/components/ComboBox.js +10 -10
  37. package/lib/react-qw/components/DateTimePicker.js +12 -12
  38. package/lib/react-qw/components/Input.js +7 -7
  39. package/lib/react-qw/components/Link.js +4 -4
  40. package/lib/react-qw/components/ListBox.js +12 -12
  41. package/lib/react-qw/components/ListView.js +35 -35
  42. package/lib/react-qw/components/PathPicker.js +3 -3
  43. package/lib/react-qw/components/ProgressBar.js +4 -4
  44. package/lib/react-qw/components/RadioButton.js +4 -4
  45. package/lib/react-qw/components/ScrollView.js +28 -28
  46. package/lib/react-qw/components/Slider.js +11 -11
  47. package/lib/react-qw/components/Tab.js +10 -10
  48. package/lib/react-qw/components/Tooltip.js +8 -8
  49. package/lib/react-qw/components/TreeView.js +20 -20
  50. package/lib/react-qw/index.js +5 -5
  51. package/lib/react-qw/index.ts +6 -5
  52. package/lib/react-qw/props.js +4 -4
  53. package/lib/react-qw/props.ts +5 -4
  54. package/lib/react-qw/reconciler.js +10 -10
  55. package/lib/react-qw/reconciler.ts +11 -10
  56. package/lib/text-measure.js +3 -3
  57. package/lib/text-measure.ts +4 -3
  58. package/lib/websocket.js +17 -17
  59. package/lib/websocket.ts +18 -17
  60. package/lib/windows/advapi32.js +7 -7
  61. package/lib/windows/advapi32.ts +7 -7
  62. package/lib/windows/gdi32.js +16 -16
  63. package/lib/windows/gdi32.ts +16 -16
  64. package/lib/windows/kernel32.js +41 -2
  65. package/lib/windows/kernel32.ts +45 -2
  66. package/lib/windows/shell32.js +24 -3
  67. package/lib/windows/shell32.ts +27 -4
  68. package/lib/windows/structs.js +54 -0
  69. package/lib/windows/structs.ts +63 -1
  70. package/lib/windows/user32.js +18 -6
  71. package/lib/windows/user32.ts +18 -6
  72. package/lib/windows/winspool.js +3 -3
  73. package/lib/windows/winspool.ts +3 -3
  74. package/package.json +4 -3
  75. package/quickwin.d.ts +32 -10
  76. package/qwin-nowasm-x86.exe +0 -0
  77. package/qwin-nowasm.exe +0 -0
  78. package/qwin-x86.exe +0 -0
  79. package/qwin.exe +0 -0
  80. package/test/test_ffi_bind.js +7 -7
  81. package/test/test_ffi_bind.ts +8 -8
  82. package/test/test_ffi_struct.js +2 -2
  83. package/test/test_ffi_struct.ts +3 -3
  84. package/test/test_ffi_windows.js +1 -1
  85. package/test/test_ffi_windows.ts +1 -1
  86. package/test/test_files.js +7 -7
  87. package/test/test_files.ts +8 -8
  88. package/test/test_gdi_draw.js +51 -51
  89. package/test/test_gdi_draw.ts +57 -57
  90. package/test/test_http_server.js +3 -3
  91. package/test/test_http_server.ts +4 -3
  92. package/test/test_ipv6.js +3 -3
  93. package/test/test_ipv6.ts +4 -3
  94. package/test/test_net_event.js +3 -3
  95. package/test/test_net_event.ts +4 -3
  96. package/test/test_printer.js +4 -4
  97. package/test/test_printer.ts +5 -5
  98. package/test/test_react_complex.js +36 -21
  99. package/test/test_react_counter.js +34 -19
  100. package/test/test_react_flex.js +36 -21
  101. package/test/test_react_hidden.js +34 -19
  102. package/test/test_react_listview_link.js +35 -20
  103. package/test/test_react_notify.js +52 -37
  104. package/test/test_react_render.js +34 -19
  105. package/test/test_registry.js +6 -6
  106. package/test/test_registry.ts +8 -8
  107. package/test/test_wolfssl_read.js +8 -8
  108. package/test/test_wolfssl_read.ts +9 -8
  109. package/examples/execd.tsx +0 -798
  110. package/examples/execd_worker.ts +0 -127
  111. package/quickwin_const.d.ts +0 -1063
@@ -6,19 +6,20 @@ import {
6
6
  ListView, type Column, ListBox, ScrollView, RadioButton, Slider,
7
7
  TreeView, type TreeNode, DateTimePicker, Link, Tooltip, PathPicker,
8
8
  } from '../lib/react-qw/index.js'
9
+ import { WindowStyle, WmMsg } from '../constants'
9
10
 
10
11
 
11
12
  gui.RegisterClass('Gallery', (hwnd, msg, wParam, lParam) => {
12
13
  if (!hwnd) return gui.DefWindowProc(hwnd, msg, wParam, lParam)
13
- if (msg === gui.WmMsg.DESTROY) {
14
+ if (msg === WmMsg.DESTROY) {
14
15
  gui.PostQuitMessage(0)
15
16
  return 0
16
17
  }
17
18
  return gui.DefWindowProc(hwnd, msg, wParam, lParam)
18
19
  })
19
20
 
20
- const VISIBLE = gui.WindowStyle.VISIBLE
21
- const CLIPCHILDREN = gui.WindowStyle.CLIPCHILDREN
21
+ const VISIBLE = WindowStyle.VISIBLE
22
+ const CLIPCHILDREN = WindowStyle.CLIPCHILDREN
22
23
 
23
24
  interface Fruit {
24
25
  name: string
@@ -85,7 +86,7 @@ function App({ svW, svH }: { svW: number; svH: number }) {
85
86
 
86
87
  return (
87
88
  <ScrollView style={{width:svW, height:svH}} contentHeight={1600}>
88
- <w type="STATIC" ws={VISIBLE | CLIPCHILDREN | gui.WindowStyle.BORDER} style={{flexDirection:'column', gap:8, alignSelf:'stretch', flexGrow:1, padding:8}}>
89
+ <w type="STATIC" ws={VISIBLE | CLIPCHILDREN | WindowStyle.BORDER} style={{flexDirection:'column', gap:8, alignSelf:'stretch', flexGrow:1, padding:8}}>
89
90
  {/* ===== 三列上半区 ===== */}
90
91
  <w type="STATIC" ws={VISIBLE} style={{flexDirection:'row', gap:10, height:345}}>
91
92
 
@@ -160,7 +161,7 @@ function App({ svW, svH }: { svW: number; svH: number }) {
160
161
 
161
162
  {/* ===== Auto-Size ===== */}
162
163
  <w type="STATIC" ws={VISIBLE} text="Auto-Size" style={{height:24}} />
163
- <w type="STATIC" ws={VISIBLE | CLIPCHILDREN | gui.WindowStyle.BORDER} style={{flexDirection:'column', gap:6, alignSelf:'stretch', flexGrow:1}}>
164
+ <w type="STATIC" ws={VISIBLE | CLIPCHILDREN | WindowStyle.BORDER} style={{flexDirection:'column', gap:6, alignSelf:'stretch', flexGrow:1}}>
164
165
  <w type="STATIC" ws={VISIBLE} text="Buttons (auto width)" style={{height:24}} />
165
166
  <w type="STATIC" ws={VISIBLE} style={{flexDirection:'row', gap:8, alignItems:'stretch', height:30}}>
166
167
  <Button style={{width:'auto', height:30}}>OK</Button>
@@ -169,8 +170,8 @@ function App({ svW, svH }: { svW: number; svH: number }) {
169
170
  </w>
170
171
  <w type="STATIC" ws={VISIBLE} text="Statics (auto width)" style={{height:24}} />
171
172
  <w type="STATIC" ws={VISIBLE} style={{flexDirection:'row', gap:8, alignItems:'stretch', height:24}}>
172
- <w type="STATIC" ws={VISIBLE | gui.WindowStyle.BORDER} text="Short" style={{width:'auto', height:24}} />
173
- <w type="STATIC" ws={VISIBLE | gui.WindowStyle.BORDER} text="A much longer label" style={{width:'auto', height:24}} />
173
+ <w type="STATIC" ws={VISIBLE | WindowStyle.BORDER} text="Short" style={{width:'auto', height:24}} />
174
+ <w type="STATIC" ws={VISIBLE | WindowStyle.BORDER} text="A much longer label" style={{width:'auto', height:24}} />
174
175
  </w>
175
176
  <w type="STATIC" ws={VISIBLE} text="Mixed auto + fixed" style={{height:24}} />
176
177
  <w type="STATIC" ws={VISIBLE} style={{flexDirection:'row', gap:8, alignItems:'stretch', height:30}}>
@@ -269,7 +270,7 @@ function App({ svW, svH }: { svW: number; svH: number }) {
269
270
 
270
271
  const hwnd = gui.CreateWindow(
271
272
  'Gallery', 'Component Gallery',
272
- gui.WindowStyle.OVERLAPPEDWINDOW,
273
+ WindowStyle.OVERLAPPEDWINDOW,
273
274
  100, 100, 1400, 1200, null, null
274
275
  )
275
276
 
@@ -16561,6 +16561,14 @@ var LVCOLUMNW_DECL = {
16561
16561
  cxIdeal: "i32"
16562
16562
  };
16563
16563
  var LVCOLUMNW = /* @__PURE__ */ struct("LVCOLUMNW", LVCOLUMNW_DECL);
16564
+ var NOTIFYICONIDENTIFIER_DECL = {
16565
+ "#": "struct",
16566
+ cbSize: "u32",
16567
+ hWnd: "<HWND>ptr",
16568
+ uID: "u32",
16569
+ guidItem: "u32[4]"
16570
+ };
16571
+ var NOTIFYICONIDENTIFIER = /* @__PURE__ */ struct("NOTIFYICONIDENTIFIER", NOTIFYICONIDENTIFIER_DECL);
16564
16572
 
16565
16573
  // _build/lib/windows/user32.js
16566
16574
  var b = (name, sig, encoders) => bind("user32.dll", name, sig, encoders);
@@ -16626,14 +16634,14 @@ function applyProps(instance, newProps, _oldProps) {
16626
16634
  gui.ShowWindow(
16627
16635
  hwnd2,
16628
16636
  newProps.hidden ? 0 : 5
16629
- /* gui.ShowWindowCmd.SHOW */
16637
+ /* ShowWindowCmd.SHOW */
16630
16638
  );
16631
16639
  }
16632
16640
  if ("visible" in newProps) {
16633
16641
  gui.ShowWindow(
16634
16642
  hwnd2,
16635
16643
  newProps.visible ? 5 : 0
16636
- /* gui.ShowWindowCmd.HIDE */
16644
+ /* ShowWindowCmd.HIDE */
16637
16645
  );
16638
16646
  }
16639
16647
  }
@@ -16729,7 +16737,7 @@ function measureText(hdc, text, maxWidth) {
16729
16737
  -1,
16730
16738
  r.ptr,
16731
16739
  1024
16732
- /* gui.DrawTextFlag.CALCRECT */
16740
+ /* DrawTextFlag.CALCRECT */
16733
16741
  );
16734
16742
  const { right, bottom } = RECT.decode(r);
16735
16743
  return { width: right, height: bottom };
@@ -16777,7 +16785,7 @@ function setupWindowProc(instance, hwnd2) {
16777
16785
  const oldProc = GetWindowLongPtr(
16778
16786
  hwnd2,
16779
16787
  -4
16780
- /* gui.Gwlp.WNDPROC */
16788
+ /* Gwlp.WNDPROC */
16781
16789
  );
16782
16790
  instancesByHwnd.set(hwnd2, instance);
16783
16791
  gui3.SetWindowProc(hwnd2, (hwnd3, msg, wParam, lParam) => {
@@ -16865,7 +16873,7 @@ function runFlexLayout(inst) {
16865
16873
  r.width * scaleFactor,
16866
16874
  r.height * scaleFactor,
16867
16875
  64
16868
- /* gui.SetWindowPosFlag.SWP_SHOWWINDOW */
16876
+ /* SetWindowPosFlag.SWP_SHOWWINDOW */
16869
16877
  );
16870
16878
  InvalidateRect(child.hwnd, NULL, 1);
16871
16879
  child.lastRect = { x: r.x, y: r.y, w: r.width, h: r.height };
@@ -17021,7 +17029,7 @@ var hostConfig = {
17021
17029
  gui3.ShowWindow(
17022
17030
  instance.hwnd,
17023
17031
  0
17024
- /* gui.ShowWindowCmd.HIDE */
17032
+ /* ShowWindowCmd.HIDE */
17025
17033
  );
17026
17034
  },
17027
17035
  hideTextInstance(instance) {
@@ -17029,7 +17037,7 @@ var hostConfig = {
17029
17037
  gui3.ShowWindow(
17030
17038
  instance.hwnd,
17031
17039
  0
17032
- /* gui.ShowWindowCmd.HIDE */
17040
+ /* ShowWindowCmd.HIDE */
17033
17041
  );
17034
17042
  },
17035
17043
  unhideInstance(instance, _props) {
@@ -17037,7 +17045,7 @@ var hostConfig = {
17037
17045
  gui3.ShowWindow(
17038
17046
  instance.hwnd,
17039
17047
  5
17040
- /* gui.ShowWindowCmd.SHOW */
17048
+ /* ShowWindowCmd.SHOW */
17041
17049
  );
17042
17050
  },
17043
17051
  unhideTextInstance(instance, _text) {
@@ -17045,7 +17053,7 @@ var hostConfig = {
17045
17053
  gui3.ShowWindow(
17046
17054
  instance.hwnd,
17047
17055
  5
17048
- /* gui.ShowWindowCmd.SHOW */
17056
+ /* ShowWindowCmd.SHOW */
17049
17057
  );
17050
17058
  },
17051
17059
  shouldSetTextContent(_type, props) {
@@ -17473,7 +17481,7 @@ function getCellFont(hwnd2, style) {
17473
17481
  ...base,
17474
17482
  ...style.bold ? {
17475
17483
  lfWeight: 700
17476
- /* gui.FontWeight.BOLD */
17484
+ /* FontWeight.BOLD */
17477
17485
  } : {},
17478
17486
  ...style.italic ? { lfItalic: 1 } : {},
17479
17487
  ...style.underline ? { lfUnderline: 1 } : {}
@@ -17595,7 +17603,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
17595
17603
  4150,
17596
17604
  0,
17597
17605
  32 | 1 | 65536
17598
- /* gui.LvExStyle.DOUBLEBUFFER */
17606
+ /* LvExStyle.DOUBLEBUFFER */
17599
17607
  );
17600
17608
  const n = columns.length;
17601
17609
  for (let j = 0; j < n; j++) {
@@ -17640,7 +17648,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
17640
17648
  4126,
17641
17649
  j,
17642
17650
  -2
17643
- /* gui.LvColumnWidthCmd.AUTOSIZE_USEHEADER */
17651
+ /* LvColumnWidthCmd.AUTOSIZE_USEHEADER */
17644
17652
  );
17645
17653
  }
17646
17654
  }
@@ -17782,7 +17790,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17782
17790
  natW,
17783
17791
  natH,
17784
17792
  4
17785
- /* gui.SetWindowPosFlag.SWP_NOZORDER */
17793
+ /* SetWindowPosFlag.SWP_NOZORDER */
17786
17794
  );
17787
17795
  forceFlexLayout(content);
17788
17796
  if (natW > svW) {
@@ -17821,7 +17829,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17821
17829
  0,
17822
17830
  0,
17823
17831
  1 | 4
17824
- /* gui.SetWindowPosFlag.SWP_NOZORDER */
17832
+ /* SetWindowPosFlag.SWP_NOZORDER */
17825
17833
  );
17826
17834
  gui12.SetScrollInfo(sv, bar, { pos: newPos }, true);
17827
17835
  }
@@ -17887,7 +17895,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17887
17895
  handleScroll(
17888
17896
  e,
17889
17897
  1
17890
- /* gui.ScrollBar.VERT */
17898
+ /* ScrollBar.VERT */
17891
17899
  );
17892
17900
  return 0;
17893
17901
  }
@@ -17895,7 +17903,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17895
17903
  handleScroll(
17896
17904
  e,
17897
17905
  0
17898
- /* gui.ScrollBar.HORZ */
17906
+ /* ScrollBar.HORZ */
17899
17907
  );
17900
17908
  return 0;
17901
17909
  }
@@ -18059,7 +18067,7 @@ function deleteAllItems(hTree) {
18059
18067
  4353,
18060
18068
  1,
18061
18069
  -65536
18062
- /* gui.TvInsertAfter.ROOT */
18070
+ /* TvInsertAfter.ROOT */
18063
18071
  );
18064
18072
  }
18065
18073
  var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onSelect, defaultSelectedKey, selectedKey: controlledKey, style }, ref) {
@@ -18091,7 +18099,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onS
18091
18099
  4396,
18092
18100
  0,
18093
18101
  4
18094
- /* gui.TvExStyle.DOUBLEBUFFER */
18102
+ /* TvExStyle.DOUBLEBUFFER */
18095
18103
  );
18096
18104
  }, []);
18097
18105
  (0, import_react16.useEffect)(() => {
@@ -18133,9 +18141,16 @@ var b3 = (name, sig) => bind("comdlg32.dll", name, sig);
18133
18141
  var GetOpenFileName = /* @__PURE__ */ b3("GetOpenFileNameW", "<OPENFILENAMEW>ptr -> u32");
18134
18142
 
18135
18143
  // _build/lib/windows/shell32.js
18136
- var b4 = (name, sig) => bind("shell32.dll", name, sig);
18144
+ var b4 = (name, sig, encoders) => bind("shell32.dll", name, sig, encoders);
18137
18145
  var SHBrowseForFolder = /* @__PURE__ */ b4("SHBrowseForFolderW", "<BROWSEINFOW>ptr -> <>ptr");
18138
18146
  var SHGetPathFromIDList = /* @__PURE__ */ b4("SHGetPathFromIDListW", "<>ptr <BYTE>ptr -> u32");
18147
+ var Shell_NotifyIconGetRect = (() => {
18148
+ try {
18149
+ return b4("Shell_NotifyIconGetRect", "<NOTIFYICONIDENTIFIER>ptr <RECT>ptr -> i32", { NOTIFYICONIDENTIFIER });
18150
+ } catch {
18151
+ return null;
18152
+ }
18153
+ })();
18139
18154
 
18140
18155
  // _build/lib/windows/ole32.js
18141
18156
  var b5 = (name, sig) => bind("ole32.dll", name, sig);
@@ -2,10 +2,11 @@ import '../lib/polyfill.js'
2
2
  import * as gui from 'gui'
3
3
  import { Suspense, lazy, useState } from 'react'
4
4
  import { render } from '../lib/react-qw/index.js'
5
+ import { WindowStyle, WmMsg } from '../constants'
5
6
 
6
7
  gui.RegisterClass('LazyTest', (hwnd, msg, wParam, lParam) => {
7
8
  if (!hwnd) return gui.DefWindowProc(hwnd, msg, wParam, lParam)
8
- if (msg === gui.WmMsg.DESTROY) {
9
+ if (msg === WmMsg.DESTROY) {
9
10
  gui.PostQuitMessage(0)
10
11
  return 0
11
12
  }
@@ -15,7 +16,7 @@ gui.RegisterClass('LazyTest', (hwnd, msg, wParam, lParam) => {
15
16
  function SimpleComponent() {
16
17
  return (
17
18
  <w type="STATIC" text="Hello from lazy component!"
18
- ws={gui.WindowStyle.CHILD | gui.WindowStyle.VISIBLE}
19
+ ws={WindowStyle.CHILD | WindowStyle.VISIBLE}
19
20
  style={{width:300, height:30}} />
20
21
  )
21
22
  }
@@ -28,11 +29,11 @@ const LazySimple = lazy(async () => {
28
29
  function App() {
29
30
  const [show, setShow] = useState(false)
30
31
  return (
31
- <w type="STATIC" ws={gui.WindowStyle.VISIBLE}
32
+ <w type="STATIC" ws={WindowStyle.VISIBLE}
32
33
  style={{flexDirection:'column', padding:10, gap:10, flexGrow:1}}>
33
34
  <w type="BUTTON"
34
35
  text={show ? 'Hide Lazy' : 'Show Lazy'}
35
- ws={gui.WindowStyle.CHILD | gui.WindowStyle.VISIBLE}
36
+ ws={WindowStyle.CHILD | WindowStyle.VISIBLE}
36
37
  style={{width:150, height:30}}
37
38
  onEvent={(e: { msg: number; wParam: number; lParam: number }) => {
38
39
  if (e.msg === 0x0202) setShow(!show)
@@ -41,7 +42,7 @@ function App() {
41
42
  {show && (
42
43
  <Suspense fallback={
43
44
  <w type="STATIC" text="Loading..."
44
- ws={gui.WindowStyle.CHILD | gui.WindowStyle.VISIBLE}
45
+ ws={WindowStyle.CHILD | WindowStyle.VISIBLE}
45
46
  style={{width:200, height:30}} />
46
47
  }>
47
48
  <LazySimple />
@@ -53,7 +54,7 @@ function App() {
53
54
 
54
55
  const hwnd = gui.CreateWindow(
55
56
  'LazyTest', 'React.lazy Test',
56
- gui.WindowStyle.OVERLAPPEDWINDOW,
57
+ WindowStyle.OVERLAPPEDWINDOW,
57
58
  200, 200, 400, 300, null, null
58
59
  )
59
60
 
@@ -16561,6 +16561,14 @@ var LVCOLUMNW_DECL = {
16561
16561
  cxIdeal: "i32"
16562
16562
  };
16563
16563
  var LVCOLUMNW = /* @__PURE__ */ struct("LVCOLUMNW", LVCOLUMNW_DECL);
16564
+ var NOTIFYICONIDENTIFIER_DECL = {
16565
+ "#": "struct",
16566
+ cbSize: "u32",
16567
+ hWnd: "<HWND>ptr",
16568
+ uID: "u32",
16569
+ guidItem: "u32[4]"
16570
+ };
16571
+ var NOTIFYICONIDENTIFIER = /* @__PURE__ */ struct("NOTIFYICONIDENTIFIER", NOTIFYICONIDENTIFIER_DECL);
16564
16572
 
16565
16573
  // _build/lib/windows/user32.js
16566
16574
  var b = (name, sig, encoders) => bind("user32.dll", name, sig, encoders);
@@ -16626,14 +16634,14 @@ function applyProps(instance, newProps, _oldProps) {
16626
16634
  gui.ShowWindow(
16627
16635
  hwnd2,
16628
16636
  newProps.hidden ? 0 : 5
16629
- /* gui.ShowWindowCmd.SHOW */
16637
+ /* ShowWindowCmd.SHOW */
16630
16638
  );
16631
16639
  }
16632
16640
  if ("visible" in newProps) {
16633
16641
  gui.ShowWindow(
16634
16642
  hwnd2,
16635
16643
  newProps.visible ? 5 : 0
16636
- /* gui.ShowWindowCmd.HIDE */
16644
+ /* ShowWindowCmd.HIDE */
16637
16645
  );
16638
16646
  }
16639
16647
  }
@@ -16729,7 +16737,7 @@ function measureText(hdc, text, maxWidth) {
16729
16737
  -1,
16730
16738
  r.ptr,
16731
16739
  1024
16732
- /* gui.DrawTextFlag.CALCRECT */
16740
+ /* DrawTextFlag.CALCRECT */
16733
16741
  );
16734
16742
  const { right, bottom } = RECT.decode(r);
16735
16743
  return { width: right, height: bottom };
@@ -16777,7 +16785,7 @@ function setupWindowProc(instance, hwnd2) {
16777
16785
  const oldProc = GetWindowLongPtr(
16778
16786
  hwnd2,
16779
16787
  -4
16780
- /* gui.Gwlp.WNDPROC */
16788
+ /* Gwlp.WNDPROC */
16781
16789
  );
16782
16790
  instancesByHwnd.set(hwnd2, instance);
16783
16791
  gui3.SetWindowProc(hwnd2, (hwnd3, msg, wParam, lParam) => {
@@ -16865,7 +16873,7 @@ function runFlexLayout(inst) {
16865
16873
  r.width * scaleFactor,
16866
16874
  r.height * scaleFactor,
16867
16875
  64
16868
- /* gui.SetWindowPosFlag.SWP_SHOWWINDOW */
16876
+ /* SetWindowPosFlag.SWP_SHOWWINDOW */
16869
16877
  );
16870
16878
  InvalidateRect(child.hwnd, NULL, 1);
16871
16879
  child.lastRect = { x: r.x, y: r.y, w: r.width, h: r.height };
@@ -17021,7 +17029,7 @@ var hostConfig = {
17021
17029
  gui3.ShowWindow(
17022
17030
  instance.hwnd,
17023
17031
  0
17024
- /* gui.ShowWindowCmd.HIDE */
17032
+ /* ShowWindowCmd.HIDE */
17025
17033
  );
17026
17034
  },
17027
17035
  hideTextInstance(instance) {
@@ -17029,7 +17037,7 @@ var hostConfig = {
17029
17037
  gui3.ShowWindow(
17030
17038
  instance.hwnd,
17031
17039
  0
17032
- /* gui.ShowWindowCmd.HIDE */
17040
+ /* ShowWindowCmd.HIDE */
17033
17041
  );
17034
17042
  },
17035
17043
  unhideInstance(instance, _props) {
@@ -17037,7 +17045,7 @@ var hostConfig = {
17037
17045
  gui3.ShowWindow(
17038
17046
  instance.hwnd,
17039
17047
  5
17040
- /* gui.ShowWindowCmd.SHOW */
17048
+ /* ShowWindowCmd.SHOW */
17041
17049
  );
17042
17050
  },
17043
17051
  unhideTextInstance(instance, _text) {
@@ -17045,7 +17053,7 @@ var hostConfig = {
17045
17053
  gui3.ShowWindow(
17046
17054
  instance.hwnd,
17047
17055
  5
17048
- /* gui.ShowWindowCmd.SHOW */
17056
+ /* ShowWindowCmd.SHOW */
17049
17057
  );
17050
17058
  },
17051
17059
  shouldSetTextContent(_type, props) {
@@ -17473,7 +17481,7 @@ function getCellFont(hwnd2, style) {
17473
17481
  ...base,
17474
17482
  ...style.bold ? {
17475
17483
  lfWeight: 700
17476
- /* gui.FontWeight.BOLD */
17484
+ /* FontWeight.BOLD */
17477
17485
  } : {},
17478
17486
  ...style.italic ? { lfItalic: 1 } : {},
17479
17487
  ...style.underline ? { lfUnderline: 1 } : {}
@@ -17595,7 +17603,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
17595
17603
  4150,
17596
17604
  0,
17597
17605
  32 | 1 | 65536
17598
- /* gui.LvExStyle.DOUBLEBUFFER */
17606
+ /* LvExStyle.DOUBLEBUFFER */
17599
17607
  );
17600
17608
  const n = columns.length;
17601
17609
  for (let j = 0; j < n; j++) {
@@ -17640,7 +17648,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
17640
17648
  4126,
17641
17649
  j,
17642
17650
  -2
17643
- /* gui.LvColumnWidthCmd.AUTOSIZE_USEHEADER */
17651
+ /* LvColumnWidthCmd.AUTOSIZE_USEHEADER */
17644
17652
  );
17645
17653
  }
17646
17654
  }
@@ -17782,7 +17790,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17782
17790
  natW,
17783
17791
  natH,
17784
17792
  4
17785
- /* gui.SetWindowPosFlag.SWP_NOZORDER */
17793
+ /* SetWindowPosFlag.SWP_NOZORDER */
17786
17794
  );
17787
17795
  forceFlexLayout(content);
17788
17796
  if (natW > svW) {
@@ -17821,7 +17829,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17821
17829
  0,
17822
17830
  0,
17823
17831
  1 | 4
17824
- /* gui.SetWindowPosFlag.SWP_NOZORDER */
17832
+ /* SetWindowPosFlag.SWP_NOZORDER */
17825
17833
  );
17826
17834
  gui12.SetScrollInfo(sv, bar, { pos: newPos }, true);
17827
17835
  }
@@ -17887,7 +17895,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17887
17895
  handleScroll(
17888
17896
  e,
17889
17897
  1
17890
- /* gui.ScrollBar.VERT */
17898
+ /* ScrollBar.VERT */
17891
17899
  );
17892
17900
  return 0;
17893
17901
  }
@@ -17895,7 +17903,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
17895
17903
  handleScroll(
17896
17904
  e,
17897
17905
  0
17898
- /* gui.ScrollBar.HORZ */
17906
+ /* ScrollBar.HORZ */
17899
17907
  );
17900
17908
  return 0;
17901
17909
  }
@@ -18059,7 +18067,7 @@ function deleteAllItems(hTree) {
18059
18067
  4353,
18060
18068
  1,
18061
18069
  -65536
18062
- /* gui.TvInsertAfter.ROOT */
18070
+ /* TvInsertAfter.ROOT */
18063
18071
  );
18064
18072
  }
18065
18073
  var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onSelect, defaultSelectedKey, selectedKey: controlledKey, style }, ref) {
@@ -18091,7 +18099,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onS
18091
18099
  4396,
18092
18100
  0,
18093
18101
  4
18094
- /* gui.TvExStyle.DOUBLEBUFFER */
18102
+ /* TvExStyle.DOUBLEBUFFER */
18095
18103
  );
18096
18104
  }, []);
18097
18105
  (0, import_react16.useEffect)(() => {
@@ -18133,9 +18141,16 @@ var b3 = (name, sig) => bind("comdlg32.dll", name, sig);
18133
18141
  var GetOpenFileName = /* @__PURE__ */ b3("GetOpenFileNameW", "<OPENFILENAMEW>ptr -> u32");
18134
18142
 
18135
18143
  // _build/lib/windows/shell32.js
18136
- var b4 = (name, sig) => bind("shell32.dll", name, sig);
18144
+ var b4 = (name, sig, encoders) => bind("shell32.dll", name, sig, encoders);
18137
18145
  var SHBrowseForFolder = /* @__PURE__ */ b4("SHBrowseForFolderW", "<BROWSEINFOW>ptr -> <>ptr");
18138
18146
  var SHGetPathFromIDList = /* @__PURE__ */ b4("SHGetPathFromIDListW", "<>ptr <BYTE>ptr -> u32");
18147
+ var Shell_NotifyIconGetRect = (() => {
18148
+ try {
18149
+ return b4("Shell_NotifyIconGetRect", "<NOTIFYICONIDENTIFIER>ptr <RECT>ptr -> i32", { NOTIFYICONIDENTIFIER });
18150
+ } catch {
18151
+ return null;
18152
+ }
18153
+ })();
18139
18154
 
18140
18155
  // _build/lib/windows/ole32.js
18141
18156
  var b5 = (name, sig) => bind("ole32.dll", name, sig);
@@ -2,6 +2,7 @@ import '../lib/polyfill.js'
2
2
  import * as gui from 'gui'
3
3
  import { useState } from 'react'
4
4
  import { render, ListBox } from '../lib/react-qw/index.js'
5
+ import { WindowStyle, WmMsg } from '../constants'
5
6
 
6
7
  let itemCounter = 10
7
8
 
@@ -17,21 +18,21 @@ function App() {
17
18
  return (
18
19
  <w
19
20
  type="STATIC"
20
- ws={gui.WindowStyle.VISIBLE}
21
+ ws={WindowStyle.VISIBLE}
21
22
  style={{ width: 400, height: 500, flexDirection: 'column', alignItems: 'flex-start' }}
22
23
  >
23
24
  <w
24
25
  type="STATIC"
25
- ws={gui.WindowStyle.VISIBLE}
26
+ ws={WindowStyle.VISIBLE}
26
27
  style={{ flexDirection: 'row', width: 400, height: 26 }}
27
28
  >
28
29
  <w
29
30
  type="BUTTON"
30
31
  text="Add Item"
31
- ws={gui.WindowStyle.VISIBLE}
32
+ ws={WindowStyle.VISIBLE}
32
33
  style={{ width: 80, height: 26 }}
33
34
  onEvent={(e) => {
34
- if (e.msg === gui.WmMsg.LBUTTONDOWN) {
35
+ if (e.msg === WmMsg.LBUTTONDOWN) {
35
36
  setItems(prev => [...prev, `Item ${itemCounter++}`])
36
37
  }
37
38
  }}
@@ -39,7 +40,7 @@ function App() {
39
40
  <w
40
41
  type="STATIC"
41
42
  text={`Selected[${selIndex}]: ${selectedText}`}
42
- ws={gui.WindowStyle.VISIBLE}
43
+ ws={WindowStyle.VISIBLE}
43
44
  style={{ width: 200, height: 26 }}
44
45
  />
45
46
  </w>
@@ -58,7 +59,7 @@ function App() {
58
59
 
59
60
  gui.RegisterClass('ListBoxDemo', (hwnd, msg, wParam, lParam) => {
60
61
  if (!hwnd) return gui.DefWindowProc(hwnd, msg, wParam, lParam)
61
- if (msg === gui.WmMsg.CREATE) {
62
+ if (msg === WmMsg.CREATE) {
62
63
  render(<App />, hwnd)
63
64
  return 0
64
65
  }
@@ -67,5 +68,5 @@ gui.RegisterClass('ListBoxDemo', (hwnd, msg, wParam, lParam) => {
67
68
  })
68
69
 
69
70
  const hwnd = gui.CreateWindow('ListBoxDemo', 'ListBox Demo',
70
- gui.WindowStyle.OVERLAPPEDWINDOW, 200, 100, 400, 500, null, null)
71
+ WindowStyle.OVERLAPPEDWINDOW, 200, 100, 400, 500, null, null)
71
72
  if (hwnd) gui.ShowWindow(hwnd)