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.
- package/README.en.md +7 -7
- package/README.md +7 -7
- package/constants.ts +1063 -0
- package/enum_map.d.ts +129 -0
- package/examples/PdfCanvas.js +2 -2
- package/examples/PdfCanvas.tsx +3 -2
- package/examples/{execd.js → execd/main.js} +563 -122
- package/examples/execd/tray.js +192 -0
- package/examples/{execd_worker.js → execd/worker.js} +7 -7
- package/examples/pdf_preview2.js +46 -46
- package/examples/pdf_preview2.ts +55 -54
- package/examples/pdf_viewer.js +34 -19
- package/examples/pdf_viewer.tsx +6 -5
- package/examples/test_gallery.js +35 -20
- package/examples/test_gallery.tsx +9 -8
- package/examples/test_react_lazy.js +34 -19
- package/examples/test_react_lazy.tsx +7 -6
- package/examples/test_react_listbox.js +34 -19
- package/examples/test_react_listbox.tsx +8 -7
- package/examples/test_root_window.js +34 -19
- package/examples/test_root_window.tsx +5 -5
- package/examples/test_tab.js +34 -19
- package/examples/test_tab.tsx +7 -6
- package/examples/tray_demo.js +8 -8
- package/examples/tray_demo.tsx +9 -8
- package/lib/dumpRects.js +2 -2
- package/lib/dumpRects.ts +3 -2
- package/lib/fetch.js +15 -15
- package/lib/fetch.ts +16 -15
- package/lib/ffi/bind.js +3 -3
- package/lib/ffi/bind.ts +3 -3
- package/lib/http-server.js +4 -4
- package/lib/http-server.ts +5 -4
- package/lib/react-qw/components/Button.js +2 -2
- package/lib/react-qw/components/CheckBox.js +4 -4
- package/lib/react-qw/components/ComboBox.js +10 -10
- package/lib/react-qw/components/DateTimePicker.js +12 -12
- package/lib/react-qw/components/Input.js +7 -7
- package/lib/react-qw/components/Link.js +4 -4
- package/lib/react-qw/components/ListBox.js +12 -12
- package/lib/react-qw/components/ListView.js +35 -35
- package/lib/react-qw/components/PathPicker.js +3 -3
- package/lib/react-qw/components/ProgressBar.js +4 -4
- package/lib/react-qw/components/RadioButton.js +4 -4
- package/lib/react-qw/components/ScrollView.js +28 -28
- package/lib/react-qw/components/Slider.js +11 -11
- package/lib/react-qw/components/Tab.js +10 -10
- package/lib/react-qw/components/Tooltip.js +8 -8
- package/lib/react-qw/components/TreeView.js +20 -20
- package/lib/react-qw/index.js +5 -5
- package/lib/react-qw/index.ts +6 -5
- package/lib/react-qw/props.js +4 -4
- package/lib/react-qw/props.ts +5 -4
- package/lib/react-qw/reconciler.js +10 -10
- package/lib/react-qw/reconciler.ts +11 -10
- package/lib/text-measure.js +3 -3
- package/lib/text-measure.ts +4 -3
- package/lib/websocket.js +17 -17
- package/lib/websocket.ts +18 -17
- package/lib/windows/advapi32.js +7 -7
- package/lib/windows/advapi32.ts +7 -7
- package/lib/windows/gdi32.js +16 -16
- package/lib/windows/gdi32.ts +16 -16
- package/lib/windows/kernel32.js +41 -2
- package/lib/windows/kernel32.ts +45 -2
- package/lib/windows/shell32.js +24 -3
- package/lib/windows/shell32.ts +27 -4
- package/lib/windows/structs.js +54 -0
- package/lib/windows/structs.ts +63 -1
- package/lib/windows/user32.js +18 -6
- package/lib/windows/user32.ts +18 -6
- package/lib/windows/winspool.js +3 -3
- package/lib/windows/winspool.ts +3 -3
- package/package.json +4 -3
- package/quickwin.d.ts +32 -10
- package/qwin-nowasm-x86.exe +0 -0
- package/qwin-nowasm.exe +0 -0
- package/qwin-x86.exe +0 -0
- package/qwin.exe +0 -0
- package/test/test_ffi_bind.js +7 -7
- package/test/test_ffi_bind.ts +8 -8
- package/test/test_ffi_struct.js +2 -2
- package/test/test_ffi_struct.ts +3 -3
- package/test/test_ffi_windows.js +1 -1
- package/test/test_ffi_windows.ts +1 -1
- package/test/test_files.js +7 -7
- package/test/test_files.ts +8 -8
- package/test/test_gdi_draw.js +51 -51
- package/test/test_gdi_draw.ts +57 -57
- package/test/test_http_server.js +3 -3
- package/test/test_http_server.ts +4 -3
- package/test/test_ipv6.js +3 -3
- package/test/test_ipv6.ts +4 -3
- package/test/test_net_event.js +3 -3
- package/test/test_net_event.ts +4 -3
- package/test/test_printer.js +4 -4
- package/test/test_printer.ts +5 -5
- package/test/test_react_complex.js +36 -21
- package/test/test_react_counter.js +34 -19
- package/test/test_react_flex.js +36 -21
- package/test/test_react_hidden.js +34 -19
- package/test/test_react_listview_link.js +35 -20
- package/test/test_react_notify.js +52 -37
- package/test/test_react_render.js +34 -19
- package/test/test_registry.js +6 -6
- package/test/test_registry.ts +8 -8
- package/test/test_wolfssl_read.js +8 -8
- package/test/test_wolfssl_read.ts +9 -8
- package/examples/execd.tsx +0 -798
- package/examples/execd_worker.ts +0 -127
- package/quickwin_const.d.ts +0 -1063
package/examples/pdf_preview2.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { BITMAPINFOHEADER, OPENFILENAMEW } from '../lib/windows/structs.js'
|
|
|
9
9
|
import { GetOpenFileName } from '../lib/windows/comdlg32.js'
|
|
10
10
|
import { GetDC, ReleaseDC } from '../lib/windows/user32.js'
|
|
11
11
|
import { PatBlt, SetDIBitsToDevice } from '../lib/windows/gdi32.js'
|
|
12
|
+
import { Gwlp, MouseKeyFlag, ScrollBar, ScrollCmd, SetWindowPosFlag, SetWindowPosHwnd, WindowStyle, WmMsg } from '../constants'
|
|
12
13
|
|
|
13
14
|
type MuPdf = typeof import('../vendor/mupdf-wasm/mupdf.js')
|
|
14
15
|
|
|
@@ -120,32 +121,32 @@ function updateScrollRange(): void {
|
|
|
120
121
|
scrollX = Math.min(scrollX, maxX)
|
|
121
122
|
scrollY = Math.min(scrollY, maxY)
|
|
122
123
|
if (currentPixmap.w > cw) {
|
|
123
|
-
const style = gui.GetWindowLongPtr(hwndCanvas,
|
|
124
|
-
if (!(style &
|
|
125
|
-
gui.SetWindowLongPtr(hwndCanvas,
|
|
126
|
-
gui.SetWindowPos(hwndCanvas,
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
const style = gui.GetWindowLongPtr(hwndCanvas, Gwlp.STYLE) | 0
|
|
125
|
+
if (!(style & WindowStyle.HSCROLL)) {
|
|
126
|
+
gui.SetWindowLongPtr(hwndCanvas, Gwlp.STYLE, style | WindowStyle.HSCROLL)
|
|
127
|
+
gui.SetWindowPos(hwndCanvas, SetWindowPosHwnd.TOP, 0, 0, 0, 0,
|
|
128
|
+
SetWindowPosFlag.SWP_NOMOVE | SetWindowPosFlag.SWP_NOSIZE |
|
|
129
|
+
SetWindowPosFlag.SWP_NOZORDER | SetWindowPosFlag.SWP_FRAMECHANGED)
|
|
129
130
|
}
|
|
130
|
-
gui.SetScrollInfo(hwndCanvas,
|
|
131
|
-
gui.ShowScrollBar(hwndCanvas,
|
|
131
|
+
gui.SetScrollInfo(hwndCanvas, ScrollBar.HORZ, { min: 0, max: currentPixmap.w - 1, page: cw, pos: scrollX }, true)
|
|
132
|
+
gui.ShowScrollBar(hwndCanvas, ScrollBar.HORZ, true)
|
|
132
133
|
} else {
|
|
133
134
|
scrollX = 0
|
|
134
|
-
const style = gui.GetWindowLongPtr(hwndCanvas,
|
|
135
|
-
if (style &
|
|
136
|
-
gui.SetWindowLongPtr(hwndCanvas,
|
|
137
|
-
gui.SetWindowPos(hwndCanvas,
|
|
138
|
-
|
|
139
|
-
|
|
135
|
+
const style = gui.GetWindowLongPtr(hwndCanvas, Gwlp.STYLE) | 0
|
|
136
|
+
if (style & WindowStyle.HSCROLL) {
|
|
137
|
+
gui.SetWindowLongPtr(hwndCanvas, Gwlp.STYLE, style & ~WindowStyle.HSCROLL)
|
|
138
|
+
gui.SetWindowPos(hwndCanvas, SetWindowPosHwnd.TOP, 0, 0, 0, 0,
|
|
139
|
+
SetWindowPosFlag.SWP_NOMOVE | SetWindowPosFlag.SWP_NOSIZE |
|
|
140
|
+
SetWindowPosFlag.SWP_NOZORDER | SetWindowPosFlag.SWP_FRAMECHANGED)
|
|
140
141
|
}
|
|
141
|
-
gui.ShowScrollBar(hwndCanvas,
|
|
142
|
+
gui.ShowScrollBar(hwndCanvas, ScrollBar.HORZ, false)
|
|
142
143
|
}
|
|
143
144
|
if (currentPixmap.h > ch) {
|
|
144
|
-
gui.SetScrollInfo(hwndCanvas,
|
|
145
|
-
gui.ShowScrollBar(hwndCanvas,
|
|
146
|
-
} else { scrollY = 0; gui.ShowScrollBar(hwndCanvas,
|
|
147
|
-
gui.SetWindowPos(hwndContent,
|
|
148
|
-
|
|
145
|
+
gui.SetScrollInfo(hwndCanvas, ScrollBar.VERT, { min: 0, max: currentPixmap.h - 1, page: ch, pos: scrollY }, true)
|
|
146
|
+
gui.ShowScrollBar(hwndCanvas, ScrollBar.VERT, true)
|
|
147
|
+
} else { scrollY = 0; gui.ShowScrollBar(hwndCanvas, ScrollBar.VERT, false) }
|
|
148
|
+
gui.SetWindowPos(hwndContent, SetWindowPosHwnd.TOP, -scrollX, -scrollY, 0, 0,
|
|
149
|
+
SetWindowPosFlag.SWP_NOSIZE | SetWindowPosFlag.SWP_NOZORDER)
|
|
149
150
|
}
|
|
150
151
|
|
|
151
152
|
function showPdf(mupdf: MuPdf, path: string, pageIdx: number): void {
|
|
@@ -155,8 +156,8 @@ function showPdf(mupdf: MuPdf, path: string, pageIdx: number): void {
|
|
|
155
156
|
currentPixmap = pix; currentPage = pageIdx; totalPages = pix.totalPages
|
|
156
157
|
gui.SetWindowText(hwndMain, 'PDF 预览 - 第 ' + (pageIdx + 1) + '/' + totalPages + ' 页')
|
|
157
158
|
scrollX = 0; scrollY = 0
|
|
158
|
-
gui.SetWindowPos(hwndContent,
|
|
159
|
-
|
|
159
|
+
gui.SetWindowPos(hwndContent, SetWindowPosHwnd.TOP, 0, 0, pix.w, pix.h,
|
|
160
|
+
SetWindowPosFlag.SWP_NOZORDER | SetWindowPosFlag.SWP_NOMOVE)
|
|
160
161
|
updateScrollRange()
|
|
161
162
|
gui.InvalidateRect(hwndContent, null, true)
|
|
162
163
|
}
|
|
@@ -170,19 +171,19 @@ function doScroll(dx: number, dy: number): void {
|
|
|
170
171
|
const maxY = Math.max(0, currentPixmap.h - ch)
|
|
171
172
|
scrollX = Math.max(0, Math.min(maxX, scrollX + dx))
|
|
172
173
|
scrollY = Math.max(0, Math.min(maxY, scrollY + dy))
|
|
173
|
-
gui.SetWindowPos(hwndContent,
|
|
174
|
-
|
|
175
|
-
gui.SetScrollInfo(hwndCanvas,
|
|
176
|
-
gui.SetScrollInfo(hwndCanvas,
|
|
174
|
+
gui.SetWindowPos(hwndContent, SetWindowPosHwnd.TOP, -scrollX, -scrollY, 0, 0,
|
|
175
|
+
SetWindowPosFlag.SWP_NOSIZE | SetWindowPosFlag.SWP_NOZORDER)
|
|
176
|
+
gui.SetScrollInfo(hwndCanvas, ScrollBar.HORZ, { pos: scrollX }, true)
|
|
177
|
+
gui.SetScrollInfo(hwndCanvas, ScrollBar.VERT, { pos: scrollY }, true)
|
|
177
178
|
}
|
|
178
179
|
|
|
179
180
|
async function main(): Promise<void> {
|
|
180
181
|
const mupdf = await loadMupdf()
|
|
181
182
|
if (!mupdf) { gui.MessageBox('加载 mupdf WASM 失败'); return }
|
|
182
183
|
|
|
183
|
-
const WS_CHILD =
|
|
184
|
-
const WS_VIS =
|
|
185
|
-
const WS_BORDER =
|
|
184
|
+
const WS_CHILD = WindowStyle.CHILD
|
|
185
|
+
const WS_VIS = WindowStyle.VISIBLE
|
|
186
|
+
const WS_BORDER = WindowStyle.BORDER
|
|
186
187
|
const ctrlY = 12, ctrlH = 26, gap = 4, btnW = 80, btnPageW = 72
|
|
187
188
|
|
|
188
189
|
let hwndBtnOpen: gui.HWND | null = null
|
|
@@ -191,18 +192,18 @@ let hwndBtnNext: gui.HWND | null = null
|
|
|
191
192
|
|
|
192
193
|
gui.RegisterClass('PdfViewer2', (hwnd, msg, wParam, lParam) => {
|
|
193
194
|
assertNonNullable(hwndCanvas); assertNonNullable(hwndEdit); assertNonNullable(hwndBtnOpen); assertNonNullable(hwndBtnPrev); assertNonNullable(hwndBtnNext)
|
|
194
|
-
if (msg ===
|
|
195
|
-
if (msg ===
|
|
195
|
+
if (msg === WmMsg.DESTROY) { gui.PostQuitMessage(0); return 0 }
|
|
196
|
+
if (msg === WmMsg.SIZE) {
|
|
196
197
|
const cr = gui.GetClientRect(hwnd)
|
|
197
198
|
if (cr) {
|
|
198
199
|
const cw = cr.right - cr.left, ch = cr.bottom - cr.top
|
|
199
|
-
gui.SetWindowPos(hwndCanvas,
|
|
200
|
-
gui.SetWindowPos(hwndEdit,
|
|
201
|
-
|
|
200
|
+
gui.SetWindowPos(hwndCanvas, SetWindowPosHwnd.TOP, 0, 50, cw, Math.max(1, ch - 50), SetWindowPosFlag.SWP_NOZORDER)
|
|
201
|
+
gui.SetWindowPos(hwndEdit, SetWindowPosHwnd.TOP, 0, 0, Math.max(100, cw - 320), 0,
|
|
202
|
+
SetWindowPosFlag.SWP_NOMOVE | SetWindowPosFlag.SWP_NOZORDER)
|
|
202
203
|
}
|
|
203
204
|
return gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
204
205
|
}
|
|
205
|
-
if (msg ===
|
|
206
|
+
if (msg === WmMsg.COMMAND) {
|
|
206
207
|
const hCtrl = lParam
|
|
207
208
|
if (hCtrl === hwndBtnOpen) {
|
|
208
209
|
const path = openPdfFileDialog()
|
|
@@ -219,7 +220,7 @@ let hwndBtnNext: gui.HWND | null = null
|
|
|
219
220
|
return gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
220
221
|
})
|
|
221
222
|
hwndMain = gui.CreateWindow('PdfViewer2', 'PDF 预览 2',
|
|
222
|
-
|
|
223
|
+
WindowStyle.OVERLAPPEDWINDOW | WindowStyle.CLIPCHILDREN,
|
|
223
224
|
100, 100, 1100, 800, null, null)!
|
|
224
225
|
if (!hwndMain) { gui.MessageBox('创建主窗口失败'); return }
|
|
225
226
|
|
|
@@ -239,7 +240,7 @@ let hwndBtnNext: gui.HWND | null = null
|
|
|
239
240
|
|
|
240
241
|
// 画布(带滚动条)
|
|
241
242
|
hwndCanvas = gui.CreateWindow('STATIC', '',
|
|
242
|
-
WS_CHILD | WS_VIS |
|
|
243
|
+
WS_CHILD | WS_VIS | WindowStyle.CLIPCHILDREN | WindowStyle.VSCROLL | WindowStyle.HSCROLL,
|
|
243
244
|
0, 50, 1100, 750, hwndMain, null)!
|
|
244
245
|
|
|
245
246
|
// 内容窗口(画 pixmap)
|
|
@@ -256,8 +257,8 @@ let hwndBtnNext: gui.HWND | null = null
|
|
|
256
257
|
|
|
257
258
|
// 内容窗口 PAINT
|
|
258
259
|
gui.SetWindowProc(hwndContent, (hwnd: gui.HWND, msg: number, wParam: number, lParam: number): number => {
|
|
259
|
-
if (msg ===
|
|
260
|
-
if (msg ===
|
|
260
|
+
if (msg === WmMsg.ERASEBKGND) return 1
|
|
261
|
+
if (msg === WmMsg.PAINT) {
|
|
261
262
|
gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
262
263
|
const pm = currentPixmap
|
|
263
264
|
if (!pm) return 0
|
|
@@ -274,8 +275,8 @@ let hwndBtnNext: gui.HWND | null = null
|
|
|
274
275
|
|
|
275
276
|
// 画布消息处理(PAINT 填白、滚动条、滚轮)
|
|
276
277
|
gui.SetWindowProc(hwndCanvas, (hwnd: gui.HWND, msg: number, wParam: number, lParam: number): number => {
|
|
277
|
-
if (msg ===
|
|
278
|
-
if (msg ===
|
|
278
|
+
if (msg === WmMsg.ERASEBKGND) return 1
|
|
279
|
+
if (msg === WmMsg.PAINT) {
|
|
279
280
|
const cr = gui.GetClientRect(hwnd)
|
|
280
281
|
if (cr) {
|
|
281
282
|
const cw = cr.right - cr.left, ch = cr.bottom - cr.top
|
|
@@ -288,29 +289,29 @@ let hwndBtnNext: gui.HWND | null = null
|
|
|
288
289
|
gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
289
290
|
return 0
|
|
290
291
|
}
|
|
291
|
-
if (msg ===
|
|
292
|
-
const bar = msg ===
|
|
292
|
+
if (msg === WmMsg.VSCROLL || msg === WmMsg.HSCROLL) {
|
|
293
|
+
const bar = msg === WmMsg.VSCROLL ? ScrollBar.VERT : ScrollBar.HORZ
|
|
293
294
|
const info = gui.GetScrollInfo(hwnd, bar)
|
|
294
295
|
const maxPos = info.max - info.page + 1
|
|
295
296
|
const code = wParam & 0xFFFF
|
|
296
|
-
let newPos = bar ===
|
|
297
|
-
if (code ===
|
|
297
|
+
let newPos = bar === ScrollBar.VERT ? scrollY : scrollX
|
|
298
|
+
if (code === ScrollCmd.THUMBTRACK || code === ScrollCmd.THUMBPOSITION)
|
|
298
299
|
newPos = Math.max(0, Math.min(maxPos, (wParam >> 16) & 0xFFFF))
|
|
299
|
-
else if (code ===
|
|
300
|
-
else if (code ===
|
|
301
|
-
else if (code ===
|
|
302
|
-
else if (code ===
|
|
300
|
+
else if (code === ScrollCmd.LINEUP) newPos -= 20
|
|
301
|
+
else if (code === ScrollCmd.LINEDOWN) newPos += 20
|
|
302
|
+
else if (code === ScrollCmd.PAGEUP) newPos -= info.page
|
|
303
|
+
else if (code === ScrollCmd.PAGEDOWN) newPos += info.page
|
|
303
304
|
else return 0
|
|
304
305
|
newPos = Math.max(0, Math.min(maxPos, newPos))
|
|
305
|
-
if (bar ===
|
|
306
|
+
if (bar === ScrollBar.VERT) doScroll(0, newPos - scrollY)
|
|
306
307
|
else doScroll(newPos - scrollX, 0)
|
|
307
308
|
return 0
|
|
308
309
|
}
|
|
309
|
-
if (msg ===
|
|
310
|
+
if (msg === WmMsg.MOUSEWHEEL) {
|
|
310
311
|
const raw = (wParam >>> 16) & 0xFFFF
|
|
311
312
|
const wheel = raw >= 0x8000 ? raw - 0x10000 : raw
|
|
312
|
-
const isHorz = (wParam &
|
|
313
|
-
const bar = isHorz ?
|
|
313
|
+
const isHorz = (wParam & MouseKeyFlag.MK_SHIFT) !== 0
|
|
314
|
+
const bar = isHorz ? ScrollBar.HORZ : ScrollBar.VERT
|
|
314
315
|
const info = gui.GetScrollInfo(hwnd, bar)
|
|
315
316
|
const maxPos = info.max - info.page + 1
|
|
316
317
|
let newPos = (isHorz ? scrollX : scrollY) - Math.round(wheel * 40 / 120)
|
|
@@ -319,7 +320,7 @@ let hwndBtnNext: gui.HWND | null = null
|
|
|
319
320
|
else doScroll(0, newPos - scrollY)
|
|
320
321
|
return 0
|
|
321
322
|
}
|
|
322
|
-
if (msg ===
|
|
323
|
+
if (msg === WmMsg.SIZE) { updateScrollRange(); return gui.DefWindowProc(hwnd, msg, wParam, lParam) }
|
|
323
324
|
return gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
324
325
|
})
|
|
325
326
|
|
package/examples/pdf_viewer.js
CHANGED
|
@@ -16579,6 +16579,14 @@ var LVCOLUMNW_DECL = {
|
|
|
16579
16579
|
cxIdeal: "i32"
|
|
16580
16580
|
};
|
|
16581
16581
|
var LVCOLUMNW = /* @__PURE__ */ struct("LVCOLUMNW", LVCOLUMNW_DECL);
|
|
16582
|
+
var NOTIFYICONIDENTIFIER_DECL = {
|
|
16583
|
+
"#": "struct",
|
|
16584
|
+
cbSize: "u32",
|
|
16585
|
+
hWnd: "<HWND>ptr",
|
|
16586
|
+
uID: "u32",
|
|
16587
|
+
guidItem: "u32[4]"
|
|
16588
|
+
};
|
|
16589
|
+
var NOTIFYICONIDENTIFIER = /* @__PURE__ */ struct("NOTIFYICONIDENTIFIER", NOTIFYICONIDENTIFIER_DECL);
|
|
16582
16590
|
|
|
16583
16591
|
// _build/lib/windows/user32.js
|
|
16584
16592
|
var b = (name, sig, encoders) => bind("user32.dll", name, sig, encoders);
|
|
@@ -16645,14 +16653,14 @@ function applyProps(instance, newProps, _oldProps) {
|
|
|
16645
16653
|
gui.ShowWindow(
|
|
16646
16654
|
hwnd,
|
|
16647
16655
|
newProps.hidden ? 0 : 5
|
|
16648
|
-
/*
|
|
16656
|
+
/* ShowWindowCmd.SHOW */
|
|
16649
16657
|
);
|
|
16650
16658
|
}
|
|
16651
16659
|
if ("visible" in newProps) {
|
|
16652
16660
|
gui.ShowWindow(
|
|
16653
16661
|
hwnd,
|
|
16654
16662
|
newProps.visible ? 5 : 0
|
|
16655
|
-
/*
|
|
16663
|
+
/* ShowWindowCmd.HIDE */
|
|
16656
16664
|
);
|
|
16657
16665
|
}
|
|
16658
16666
|
}
|
|
@@ -16748,7 +16756,7 @@ function measureText(hdc, text, maxWidth) {
|
|
|
16748
16756
|
-1,
|
|
16749
16757
|
r.ptr,
|
|
16750
16758
|
1024
|
|
16751
|
-
/*
|
|
16759
|
+
/* DrawTextFlag.CALCRECT */
|
|
16752
16760
|
);
|
|
16753
16761
|
const { right, bottom } = RECT.decode(r);
|
|
16754
16762
|
return { width: right, height: bottom };
|
|
@@ -16796,7 +16804,7 @@ function setupWindowProc(instance, hwnd) {
|
|
|
16796
16804
|
const oldProc = GetWindowLongPtr(
|
|
16797
16805
|
hwnd,
|
|
16798
16806
|
-4
|
|
16799
|
-
/*
|
|
16807
|
+
/* Gwlp.WNDPROC */
|
|
16800
16808
|
);
|
|
16801
16809
|
instancesByHwnd.set(hwnd, instance);
|
|
16802
16810
|
gui3.SetWindowProc(hwnd, (hwnd2, msg, wParam, lParam) => {
|
|
@@ -16884,7 +16892,7 @@ function runFlexLayout(inst) {
|
|
|
16884
16892
|
r.width * scaleFactor,
|
|
16885
16893
|
r.height * scaleFactor,
|
|
16886
16894
|
64
|
|
16887
|
-
/*
|
|
16895
|
+
/* SetWindowPosFlag.SWP_SHOWWINDOW */
|
|
16888
16896
|
);
|
|
16889
16897
|
InvalidateRect(child.hwnd, NULL, 1);
|
|
16890
16898
|
child.lastRect = { x: r.x, y: r.y, w: r.width, h: r.height };
|
|
@@ -17040,7 +17048,7 @@ var hostConfig = {
|
|
|
17040
17048
|
gui3.ShowWindow(
|
|
17041
17049
|
instance.hwnd,
|
|
17042
17050
|
0
|
|
17043
|
-
/*
|
|
17051
|
+
/* ShowWindowCmd.HIDE */
|
|
17044
17052
|
);
|
|
17045
17053
|
},
|
|
17046
17054
|
hideTextInstance(instance) {
|
|
@@ -17048,7 +17056,7 @@ var hostConfig = {
|
|
|
17048
17056
|
gui3.ShowWindow(
|
|
17049
17057
|
instance.hwnd,
|
|
17050
17058
|
0
|
|
17051
|
-
/*
|
|
17059
|
+
/* ShowWindowCmd.HIDE */
|
|
17052
17060
|
);
|
|
17053
17061
|
},
|
|
17054
17062
|
unhideInstance(instance, _props) {
|
|
@@ -17056,7 +17064,7 @@ var hostConfig = {
|
|
|
17056
17064
|
gui3.ShowWindow(
|
|
17057
17065
|
instance.hwnd,
|
|
17058
17066
|
5
|
|
17059
|
-
/*
|
|
17067
|
+
/* ShowWindowCmd.SHOW */
|
|
17060
17068
|
);
|
|
17061
17069
|
},
|
|
17062
17070
|
unhideTextInstance(instance, _text) {
|
|
@@ -17064,7 +17072,7 @@ var hostConfig = {
|
|
|
17064
17072
|
gui3.ShowWindow(
|
|
17065
17073
|
instance.hwnd,
|
|
17066
17074
|
5
|
|
17067
|
-
/*
|
|
17075
|
+
/* ShowWindowCmd.SHOW */
|
|
17068
17076
|
);
|
|
17069
17077
|
},
|
|
17070
17078
|
shouldSetTextContent(_type, props) {
|
|
@@ -17492,7 +17500,7 @@ function getCellFont(hwnd, style) {
|
|
|
17492
17500
|
...base,
|
|
17493
17501
|
...style.bold ? {
|
|
17494
17502
|
lfWeight: 700
|
|
17495
|
-
/*
|
|
17503
|
+
/* FontWeight.BOLD */
|
|
17496
17504
|
} : {},
|
|
17497
17505
|
...style.italic ? { lfItalic: 1 } : {},
|
|
17498
17506
|
...style.underline ? { lfUnderline: 1 } : {}
|
|
@@ -17614,7 +17622,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
|
|
|
17614
17622
|
4150,
|
|
17615
17623
|
0,
|
|
17616
17624
|
32 | 1 | 65536
|
|
17617
|
-
/*
|
|
17625
|
+
/* LvExStyle.DOUBLEBUFFER */
|
|
17618
17626
|
);
|
|
17619
17627
|
const n = columns.length;
|
|
17620
17628
|
for (let j = 0; j < n; j++) {
|
|
@@ -17659,7 +17667,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
|
|
|
17659
17667
|
4126,
|
|
17660
17668
|
j,
|
|
17661
17669
|
-2
|
|
17662
|
-
/*
|
|
17670
|
+
/* LvColumnWidthCmd.AUTOSIZE_USEHEADER */
|
|
17663
17671
|
);
|
|
17664
17672
|
}
|
|
17665
17673
|
}
|
|
@@ -17801,7 +17809,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17801
17809
|
natW,
|
|
17802
17810
|
natH,
|
|
17803
17811
|
4
|
|
17804
|
-
/*
|
|
17812
|
+
/* SetWindowPosFlag.SWP_NOZORDER */
|
|
17805
17813
|
);
|
|
17806
17814
|
forceFlexLayout(content);
|
|
17807
17815
|
if (natW > svW) {
|
|
@@ -17840,7 +17848,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17840
17848
|
0,
|
|
17841
17849
|
0,
|
|
17842
17850
|
1 | 4
|
|
17843
|
-
/*
|
|
17851
|
+
/* SetWindowPosFlag.SWP_NOZORDER */
|
|
17844
17852
|
);
|
|
17845
17853
|
gui12.SetScrollInfo(sv, bar, { pos: newPos }, true);
|
|
17846
17854
|
}
|
|
@@ -17906,7 +17914,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17906
17914
|
handleScroll(
|
|
17907
17915
|
e,
|
|
17908
17916
|
1
|
|
17909
|
-
/*
|
|
17917
|
+
/* ScrollBar.VERT */
|
|
17910
17918
|
);
|
|
17911
17919
|
return 0;
|
|
17912
17920
|
}
|
|
@@ -17914,7 +17922,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17914
17922
|
handleScroll(
|
|
17915
17923
|
e,
|
|
17916
17924
|
0
|
|
17917
|
-
/*
|
|
17925
|
+
/* ScrollBar.HORZ */
|
|
17918
17926
|
);
|
|
17919
17927
|
return 0;
|
|
17920
17928
|
}
|
|
@@ -18078,7 +18086,7 @@ function deleteAllItems(hTree) {
|
|
|
18078
18086
|
4353,
|
|
18079
18087
|
1,
|
|
18080
18088
|
-65536
|
|
18081
|
-
/*
|
|
18089
|
+
/* TvInsertAfter.ROOT */
|
|
18082
18090
|
);
|
|
18083
18091
|
}
|
|
18084
18092
|
var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onSelect, defaultSelectedKey, selectedKey: controlledKey, style }, ref) {
|
|
@@ -18110,7 +18118,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onS
|
|
|
18110
18118
|
4396,
|
|
18111
18119
|
0,
|
|
18112
18120
|
4
|
|
18113
|
-
/*
|
|
18121
|
+
/* TvExStyle.DOUBLEBUFFER */
|
|
18114
18122
|
);
|
|
18115
18123
|
}, []);
|
|
18116
18124
|
(0, import_react16.useEffect)(() => {
|
|
@@ -18152,9 +18160,16 @@ var b3 = (name, sig) => bind("comdlg32.dll", name, sig);
|
|
|
18152
18160
|
var GetOpenFileName = /* @__PURE__ */ b3("GetOpenFileNameW", "<OPENFILENAMEW>ptr -> u32");
|
|
18153
18161
|
|
|
18154
18162
|
// _build/lib/windows/shell32.js
|
|
18155
|
-
var b4 = (name, sig) => bind("shell32.dll", name, sig);
|
|
18163
|
+
var b4 = (name, sig, encoders) => bind("shell32.dll", name, sig, encoders);
|
|
18156
18164
|
var SHBrowseForFolder = /* @__PURE__ */ b4("SHBrowseForFolderW", "<BROWSEINFOW>ptr -> <>ptr");
|
|
18157
18165
|
var SHGetPathFromIDList = /* @__PURE__ */ b4("SHGetPathFromIDListW", "<>ptr <BYTE>ptr -> u32");
|
|
18166
|
+
var Shell_NotifyIconGetRect = (() => {
|
|
18167
|
+
try {
|
|
18168
|
+
return b4("Shell_NotifyIconGetRect", "<NOTIFYICONIDENTIFIER>ptr <RECT>ptr -> i32", { NOTIFYICONIDENTIFIER });
|
|
18169
|
+
} catch {
|
|
18170
|
+
return null;
|
|
18171
|
+
}
|
|
18172
|
+
})();
|
|
18158
18173
|
|
|
18159
18174
|
// _build/lib/windows/ole32.js
|
|
18160
18175
|
var b5 = (name, sig) => bind("ole32.dll", name, sig);
|
package/examples/pdf_viewer.tsx
CHANGED
|
@@ -9,6 +9,7 @@ import { WCHAR } from '../lib/ffi/bind.js'
|
|
|
9
9
|
import { PdfCanvas } from './PdfCanvas.js'
|
|
10
10
|
import { OPENFILENAMEW } from '../lib/windows/structs.js'
|
|
11
11
|
import { GetOpenFileName } from '../lib/windows/comdlg32.js'
|
|
12
|
+
import { WindowStyle } from '../constants'
|
|
12
13
|
|
|
13
14
|
type MuPdf = typeof import('../vendor/mupdf-wasm/mupdf.js')
|
|
14
15
|
|
|
@@ -180,17 +181,17 @@ function App({ mupdf, mainHwnd: hwnd }: { mupdf: MuPdf; mainHwnd: gui.HWND }) {
|
|
|
180
181
|
|
|
181
182
|
return (
|
|
182
183
|
<w type="STATIC"
|
|
183
|
-
ws={
|
|
184
|
+
ws={WindowStyle.VISIBLE | WindowStyle.CLIPCHILDREN}
|
|
184
185
|
style={{ flexDirection: 'column', gap: 4, width: 1180, height: 720 }}
|
|
185
186
|
>
|
|
186
|
-
<w type="STATIC" ws={
|
|
187
|
+
<w type="STATIC" ws={WindowStyle.VISIBLE}
|
|
187
188
|
style={{ flexDirection: 'row', gap: 6, alignItems: 'stretch', height: 28 }}
|
|
188
189
|
>
|
|
189
190
|
<w type="STATIC" style={{ width: 6 }} />
|
|
190
191
|
<Button onClick={handleOpen} style={{ width: 80 }}>Open</Button>
|
|
191
192
|
<Input value={filePath} placeholder="File path..." readonly style={{ flexGrow: 1 }} />
|
|
192
193
|
<Button onClick={handlePrev} disabled={currentPage <= 0} style={{ width: 60 }}>Prev</Button>
|
|
193
|
-
<w type="STATIC" ws={
|
|
194
|
+
<w type="STATIC" ws={WindowStyle.VISIBLE}
|
|
194
195
|
text={totalPages > 0 ? `Page ${currentPage + 1} / ${totalPages}` : 'No file'}
|
|
195
196
|
style={{ width: 120 }}
|
|
196
197
|
/>
|
|
@@ -205,7 +206,7 @@ function App({ mupdf, mainHwnd: hwnd }: { mupdf: MuPdf; mainHwnd: gui.HWND }) {
|
|
|
205
206
|
style={{ width: pixmap.w, height: pixmap.h }}
|
|
206
207
|
/>
|
|
207
208
|
) : (
|
|
208
|
-
<w type="STATIC" ws={
|
|
209
|
+
<w type="STATIC" ws={WindowStyle.VISIBLE}
|
|
209
210
|
text="Open a PDF file to preview"
|
|
210
211
|
style={{ width: 300, height: 30 }}
|
|
211
212
|
/>
|
|
@@ -225,7 +226,7 @@ async function main() {
|
|
|
225
226
|
gui.RegisterClass('PdfViewerWin')
|
|
226
227
|
const hwnd = gui.CreateWindow(
|
|
227
228
|
'PdfViewerWin', 'PDF Viewer',
|
|
228
|
-
|
|
229
|
+
WindowStyle.OVERLAPPEDWINDOW,
|
|
229
230
|
100, 100, 1200, 800, null, null
|
|
230
231
|
)
|
|
231
232
|
|
package/examples/test_gallery.js
CHANGED
|
@@ -16575,6 +16575,14 @@ var LVCOLUMNW_DECL = {
|
|
|
16575
16575
|
cxIdeal: "i32"
|
|
16576
16576
|
};
|
|
16577
16577
|
var LVCOLUMNW = /* @__PURE__ */ struct("LVCOLUMNW", LVCOLUMNW_DECL);
|
|
16578
|
+
var NOTIFYICONIDENTIFIER_DECL = {
|
|
16579
|
+
"#": "struct",
|
|
16580
|
+
cbSize: "u32",
|
|
16581
|
+
hWnd: "<HWND>ptr",
|
|
16582
|
+
uID: "u32",
|
|
16583
|
+
guidItem: "u32[4]"
|
|
16584
|
+
};
|
|
16585
|
+
var NOTIFYICONIDENTIFIER = /* @__PURE__ */ struct("NOTIFYICONIDENTIFIER", NOTIFYICONIDENTIFIER_DECL);
|
|
16578
16586
|
|
|
16579
16587
|
// _build/lib/windows/user32.js
|
|
16580
16588
|
var b = (name, sig, encoders) => bind("user32.dll", name, sig, encoders);
|
|
@@ -16640,14 +16648,14 @@ function applyProps(instance, newProps, _oldProps) {
|
|
|
16640
16648
|
gui.ShowWindow(
|
|
16641
16649
|
hwnd2,
|
|
16642
16650
|
newProps.hidden ? 0 : 5
|
|
16643
|
-
/*
|
|
16651
|
+
/* ShowWindowCmd.SHOW */
|
|
16644
16652
|
);
|
|
16645
16653
|
}
|
|
16646
16654
|
if ("visible" in newProps) {
|
|
16647
16655
|
gui.ShowWindow(
|
|
16648
16656
|
hwnd2,
|
|
16649
16657
|
newProps.visible ? 5 : 0
|
|
16650
|
-
/*
|
|
16658
|
+
/* ShowWindowCmd.HIDE */
|
|
16651
16659
|
);
|
|
16652
16660
|
}
|
|
16653
16661
|
}
|
|
@@ -16743,7 +16751,7 @@ function measureText(hdc, text, maxWidth) {
|
|
|
16743
16751
|
-1,
|
|
16744
16752
|
r.ptr,
|
|
16745
16753
|
1024
|
|
16746
|
-
/*
|
|
16754
|
+
/* DrawTextFlag.CALCRECT */
|
|
16747
16755
|
);
|
|
16748
16756
|
const { right, bottom } = RECT.decode(r);
|
|
16749
16757
|
return { width: right, height: bottom };
|
|
@@ -16791,7 +16799,7 @@ function setupWindowProc(instance, hwnd2) {
|
|
|
16791
16799
|
const oldProc = GetWindowLongPtr(
|
|
16792
16800
|
hwnd2,
|
|
16793
16801
|
-4
|
|
16794
|
-
/*
|
|
16802
|
+
/* Gwlp.WNDPROC */
|
|
16795
16803
|
);
|
|
16796
16804
|
instancesByHwnd.set(hwnd2, instance);
|
|
16797
16805
|
gui3.SetWindowProc(hwnd2, (hwnd3, msg, wParam, lParam) => {
|
|
@@ -16879,7 +16887,7 @@ function runFlexLayout(inst) {
|
|
|
16879
16887
|
r.width * scaleFactor,
|
|
16880
16888
|
r.height * scaleFactor,
|
|
16881
16889
|
64
|
|
16882
|
-
/*
|
|
16890
|
+
/* SetWindowPosFlag.SWP_SHOWWINDOW */
|
|
16883
16891
|
);
|
|
16884
16892
|
InvalidateRect(child.hwnd, NULL, 1);
|
|
16885
16893
|
child.lastRect = { x: r.x, y: r.y, w: r.width, h: r.height };
|
|
@@ -17035,7 +17043,7 @@ var hostConfig = {
|
|
|
17035
17043
|
gui3.ShowWindow(
|
|
17036
17044
|
instance.hwnd,
|
|
17037
17045
|
0
|
|
17038
|
-
/*
|
|
17046
|
+
/* ShowWindowCmd.HIDE */
|
|
17039
17047
|
);
|
|
17040
17048
|
},
|
|
17041
17049
|
hideTextInstance(instance) {
|
|
@@ -17043,7 +17051,7 @@ var hostConfig = {
|
|
|
17043
17051
|
gui3.ShowWindow(
|
|
17044
17052
|
instance.hwnd,
|
|
17045
17053
|
0
|
|
17046
|
-
/*
|
|
17054
|
+
/* ShowWindowCmd.HIDE */
|
|
17047
17055
|
);
|
|
17048
17056
|
},
|
|
17049
17057
|
unhideInstance(instance, _props) {
|
|
@@ -17051,7 +17059,7 @@ var hostConfig = {
|
|
|
17051
17059
|
gui3.ShowWindow(
|
|
17052
17060
|
instance.hwnd,
|
|
17053
17061
|
5
|
|
17054
|
-
/*
|
|
17062
|
+
/* ShowWindowCmd.SHOW */
|
|
17055
17063
|
);
|
|
17056
17064
|
},
|
|
17057
17065
|
unhideTextInstance(instance, _text) {
|
|
@@ -17059,7 +17067,7 @@ var hostConfig = {
|
|
|
17059
17067
|
gui3.ShowWindow(
|
|
17060
17068
|
instance.hwnd,
|
|
17061
17069
|
5
|
|
17062
|
-
/*
|
|
17070
|
+
/* ShowWindowCmd.SHOW */
|
|
17063
17071
|
);
|
|
17064
17072
|
},
|
|
17065
17073
|
shouldSetTextContent(_type, props) {
|
|
@@ -17487,7 +17495,7 @@ function getCellFont(hwnd2, style) {
|
|
|
17487
17495
|
...base,
|
|
17488
17496
|
...style.bold ? {
|
|
17489
17497
|
lfWeight: 700
|
|
17490
|
-
/*
|
|
17498
|
+
/* FontWeight.BOLD */
|
|
17491
17499
|
} : {},
|
|
17492
17500
|
...style.italic ? { lfItalic: 1 } : {},
|
|
17493
17501
|
...style.underline ? { lfUnderline: 1 } : {}
|
|
@@ -17609,7 +17617,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
|
|
|
17609
17617
|
4150,
|
|
17610
17618
|
0,
|
|
17611
17619
|
32 | 1 | 65536
|
|
17612
|
-
/*
|
|
17620
|
+
/* LvExStyle.DOUBLEBUFFER */
|
|
17613
17621
|
);
|
|
17614
17622
|
const n = columns.length;
|
|
17615
17623
|
for (let j = 0; j < n; j++) {
|
|
@@ -17654,7 +17662,7 @@ var ListView = (0, import_react9.forwardRef)(function ListViewInner({ columns, d
|
|
|
17654
17662
|
4126,
|
|
17655
17663
|
j,
|
|
17656
17664
|
-2
|
|
17657
|
-
/*
|
|
17665
|
+
/* LvColumnWidthCmd.AUTOSIZE_USEHEADER */
|
|
17658
17666
|
);
|
|
17659
17667
|
}
|
|
17660
17668
|
}
|
|
@@ -17796,7 +17804,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17796
17804
|
natW,
|
|
17797
17805
|
natH,
|
|
17798
17806
|
4
|
|
17799
|
-
/*
|
|
17807
|
+
/* SetWindowPosFlag.SWP_NOZORDER */
|
|
17800
17808
|
);
|
|
17801
17809
|
forceFlexLayout(content);
|
|
17802
17810
|
if (natW > svW) {
|
|
@@ -17835,7 +17843,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17835
17843
|
0,
|
|
17836
17844
|
0,
|
|
17837
17845
|
1 | 4
|
|
17838
|
-
/*
|
|
17846
|
+
/* SetWindowPosFlag.SWP_NOZORDER */
|
|
17839
17847
|
);
|
|
17840
17848
|
gui12.SetScrollInfo(sv, bar, { pos: newPos }, true);
|
|
17841
17849
|
}
|
|
@@ -17901,7 +17909,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17901
17909
|
handleScroll(
|
|
17902
17910
|
e,
|
|
17903
17911
|
1
|
|
17904
|
-
/*
|
|
17912
|
+
/* ScrollBar.VERT */
|
|
17905
17913
|
);
|
|
17906
17914
|
return 0;
|
|
17907
17915
|
}
|
|
@@ -17909,7 +17917,7 @@ var ScrollView = (0, import_react12.forwardRef)(({ children, style, contentWidth
|
|
|
17909
17917
|
handleScroll(
|
|
17910
17918
|
e,
|
|
17911
17919
|
0
|
|
17912
|
-
/*
|
|
17920
|
+
/* ScrollBar.HORZ */
|
|
17913
17921
|
);
|
|
17914
17922
|
return 0;
|
|
17915
17923
|
}
|
|
@@ -18066,7 +18074,7 @@ function Tooltip({ text, children, balloon }) {
|
|
|
18066
18074
|
0,
|
|
18067
18075
|
0,
|
|
18068
18076
|
2 | 1 | 16
|
|
18069
|
-
/*
|
|
18077
|
+
/* SetWindowPosFlag.SWP_NOACTIVATE */
|
|
18070
18078
|
);
|
|
18071
18079
|
const ti = buildToolInfo(hTarget, text);
|
|
18072
18080
|
gui15.SendMessage(hTT, 1074, 0, ti.ptr);
|
|
@@ -18131,7 +18139,7 @@ function deleteAllItems(hTree) {
|
|
|
18131
18139
|
4353,
|
|
18132
18140
|
1,
|
|
18133
18141
|
-65536
|
|
18134
|
-
/*
|
|
18142
|
+
/* TvInsertAfter.ROOT */
|
|
18135
18143
|
);
|
|
18136
18144
|
}
|
|
18137
18145
|
var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onSelect, defaultSelectedKey, selectedKey: controlledKey, style }, ref) {
|
|
@@ -18163,7 +18171,7 @@ var TreeView = (0, import_react16.forwardRef)(function TreeViewInner({ data, onS
|
|
|
18163
18171
|
4396,
|
|
18164
18172
|
0,
|
|
18165
18173
|
4
|
|
18166
|
-
/*
|
|
18174
|
+
/* TvExStyle.DOUBLEBUFFER */
|
|
18167
18175
|
);
|
|
18168
18176
|
}, []);
|
|
18169
18177
|
(0, import_react16.useEffect)(() => {
|
|
@@ -18205,9 +18213,16 @@ var b3 = (name, sig) => bind("comdlg32.dll", name, sig);
|
|
|
18205
18213
|
var GetOpenFileName = /* @__PURE__ */ b3("GetOpenFileNameW", "<OPENFILENAMEW>ptr -> u32");
|
|
18206
18214
|
|
|
18207
18215
|
// _build/lib/windows/shell32.js
|
|
18208
|
-
var b4 = (name, sig) => bind("shell32.dll", name, sig);
|
|
18216
|
+
var b4 = (name, sig, encoders) => bind("shell32.dll", name, sig, encoders);
|
|
18209
18217
|
var SHBrowseForFolder = /* @__PURE__ */ b4("SHBrowseForFolderW", "<BROWSEINFOW>ptr -> <>ptr");
|
|
18210
18218
|
var SHGetPathFromIDList = /* @__PURE__ */ b4("SHGetPathFromIDListW", "<>ptr <BYTE>ptr -> u32");
|
|
18219
|
+
var Shell_NotifyIconGetRect = (() => {
|
|
18220
|
+
try {
|
|
18221
|
+
return b4("Shell_NotifyIconGetRect", "<NOTIFYICONIDENTIFIER>ptr <RECT>ptr -> i32", { NOTIFYICONIDENTIFIER });
|
|
18222
|
+
} catch {
|
|
18223
|
+
return null;
|
|
18224
|
+
}
|
|
18225
|
+
})();
|
|
18211
18226
|
|
|
18212
18227
|
// _build/lib/windows/ole32.js
|
|
18213
18228
|
var b5 = (name, sig) => bind("ole32.dll", name, sig);
|