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