静态文本控件支持库
静态文本控件
用于在 wndproc 回调中提前调用默认消息回调函数,
所有窗口和控件定义了 wndproc 回调以后会自动创建这个函数,
调用此函数以后,wndproc 必须指定非 null 返回值,
以避免再次重复调用默认回调函数
嵌入 COM 控件的容器对象
创建该控件的父窗口(win.form对象),
设计时窗体容器是所有拖放在窗体上的控件的 _parentForm,
即使窗口移除子窗口样式、更改父子关系,或以 orphanWindow显示,
控件的 _parentForm 始终都不会改变
staticObject.addCtrl(
button={ cls="button";text="button";left=33;top=32;right=126;bottom=81;autoResize=false }
)
staticObject.adjust = function( cx,cy,wParam ) {
/*窗口缩放后会自动触发此函数。
cx 参数为窗口宽度,cy 参数为窗口高度,
wParam 参数请参考 _WM_SIZE 消息参数说明,一般不用管。
所有 win.form 创建的窗体和控件都支持此事件,
重复赋值只会追加而不会覆盖此事件。
一般不建议添加一个 wndproc 仅仅是为了处理 _WM_SIZE 消息,
定义 adjust 事件是更好的选择。
可主动调用此事件,省略参数时 cx,cy 参数默认设为窗口大小*/
};
是否允许跟随父窗体自动缩放
获取或修改景颜色数值
底部坐标
是否捕获全局鼠标消息
重新设置间隔时间或回调函数
运行时类名
删除定时器。
参数如果为 null 则忽略不执行,
否则定时器ID必须是 setInterval 函数或setTimeout函数的返回值。
请注意如果定时器被删除,ID 可能被重新分配给其他定时器。
在定时器回调函数中返回 0,false 以删除定时器是更稳妥的方式
删除定时器。
参数如果为 null 则忽略不执行,
否则定时器ID必须是 setInterval 函数或setTimeout函 数的返回值。
请注意如果定时器被删除,ID 可能被重新分配给其他定时器。
在定时器回调函数中返回 0,false 以删除定时器是更稳妥的方式
关闭控件窗口
设计时类名
获取或修改字体颜色数值
创建嵌入控件,返回控件容器对象,
容器对象的 _object 成员是创建的 COM 对象,
容器对象可通过添加成员函数响应 COM 对象事件,
容器对象的主要作用是充当访问 COM 对象的中间代理对象。
通常使用 util.metaProperty 为容器对象添加属性元表,
属性元表可拦截属性、函数调用并调用 _object 对象,
createEmbedEx 返回的容器已添加默认代理以直接访问 COM 对象
创建嵌入控件,返回控件容器对象,
容器对象的 _object 成员是创建的 COM 对象,
容器对象可通过添加成员函数响应 COM 对象事件,
容器对象的主要作用是充当访问 COM 对象的中间代理对象,
@clsId 指定控件 CLSID,
可选在参数@2中指定 COM 对象绑定的容器对象
此函数失败会抛出异常
嵌入 COM 控件,返回控件容器对象,
容器对象的 _object 成员是传入的 COM 对象,
容器对象可通过添加成员函数响应 COM 对象事件,
容器对象的主要作用是充当访问 COM 对象的中间代理对象,
@comObject 指定已创建成功的 COM 对象,
可选在参数@2中指定 COM 对象绑定的容器对象
此函数失败会抛出异常
创建嵌入 COM 控件,返回控件容器对象。
容器对象的 object 成员是创建的 COM 对象。
容器对象的 __event_ 成员为 COM 对象默认事件监听器。
在窗口销毁时解除默认事件监听器并释放 COM 对象。
返回容器已添加元表,可通过容器对象的成员代理访问 COM 对象成员。
也可以通过指定容器对象的成员函数响应 COM 对象事件
创建嵌入 COM 控件,返回控件容器对象。
此函数返回的容器已添加元表并创建代理以直接访问 COM 对象,
也可以通过指定容器对象的成员函数响应 COM 对象事件。
@clsId 指定控件 CLSID,
可选在参数 @2 中指定 COM 对象绑定的容器对象。
此函数失败会抛出异常
嵌入 COM 控件,返回控件容器对象。
此函数返回的容器已添加元表并创建代理以直接访问 COM对象,
也可以通过指定容器对象的成员函数响应 COM 对象事件。
参数 @comObject 指定已创建成功的 COM 对象,
可选在参数 @2 中指定 COM 对象绑定的容器对象。
此函数失败会抛出异常
是否禁用
指定文本时,禁用此控件,并显示指定文本,
指定为null时,启用此控件,并恢复控件之前的正常文本
将 @x,@y 表示的像素值乘以窗体当前 DPI 缩放倍数并返回,
省略 @y 参数时仅返回 @x 转换后的值,
所有 win.ui 创建的窗口或控件都提供这个函数
窗口当前使用的DPI横坐标缩放系数,
该值由界面系统自动维护,任何情况下都不应手动修改,
这是一个以小数表示百分比的数,例如 1.25 表示 125%,
窗口未使用缩放或未完成缩放初始化时,值可能为 null,
如果要获取屏幕缩放设置应改用 gdi.getDpiScale 函数
窗口当前使用的DPI纵坐标缩放系数,
该值由界面系统自动维护,任何情况下都不应手动修改,
这是一个以小数表示百分比的数,例如 1.25 表示 125%,
窗口未使用缩放或未完成缩放初始化时,值可能为 null,
如果要获取屏幕缩放设置应改用 gdi.getDpiScale 函数
超出显示范围如何显示省略号,可选值:
"path" 单行显示,在最后一个反斜杆前显示省略号
"end" 单行显示,字符串末尾超出显示范围则显示省略号
null 不显示省略号
禁用DPI自动缩放,
不指定参数启用DPI自动缩放,默认已启用
控件字体(LOGFONT 结构体),
注意获取该属性总是返回新的 LOGFONT 对象,
修改返回字体并不会更新控件字体,
除非重新赋值。
建议尽量优先使用 getFont 或 setFont 函数,
以增强代码可读性
字体会根据控件设置自动处理 DPI 缩放,不需要事先缩放字体大小
控件客户区块位置(::RECT结构体)
返回控件 LOGFONT 字体,
返回对象的 h 值会按控件的 DPI 缩放设置自动还原为缩放前大小。
返回控件 LOGFONT 字体,
返回对象的 h 值为字体实际大小,不会按控件 DPI 设置还原。
返回字体会设置 noScale 属性为 true,
使用控件的 setFont 函数或赋值 font 属性时,
noScale 属性为 true 的字体同样不会进行自动 DPI 缩放
如果是窗体返回自身
如果是控件则返回_parentForm
标准库中所有控件都拥有此同名函数用于返回控件所在窗口,
窗口对象实现了同名函数用于返回窗口自身
返回父窗口
返回相对父窗口客户区的坐标,宽,高,
参数为true返回屏幕坐标,宽,高,
x,y,cx,cy=win.getPos(hwnd)
控件区块位置(::RECT结构体)
控件屏幕区块位置(::RECT结构体)
获取顶层父窗口,这个函数会查找 orphanWindow 的父窗口
将在此控件范围内的所有其他控件设为此控件的子窗口
高度
当前控件窗口是否隐藏。
仅检查当前窗口的可见性样式(窗口 是否移除了 _WS_VISIBLE 样式)。
不考虑父窗口是否可见,不考虑是否被其他窗口遮挡。
如果需要同时判断父窗口的可见性,应改用 win.isVisible 函数。
控件句柄
控件ID
使窗口绘图区无效
使窗口绘图区无效
不刷新背景
staticObject.isDialogMessage = function(hParent,msg){/*在控件范围内替代父窗口的 isDialogMessage,
可用于在控件范围内屏蔽对话框快捷键。
可用于禁用 tab 控制键的多行文本框支持按 tab 输入制表符*/}
标准库中所有控件以及窗体对象都拥有此同名函数
窗体返回true,控件返回false
左侧坐标
将窗口转换为message-only window
该窗口不可见,仅用于消息分发
修改窗口样式,所有参数都是可选参数,
@remove 用数值指定要移除的样式,可使用 WS 前缀的常量
@add 用数值指定要添加的样式,可使用 WS 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考 win.modifyStyle 函数源码
修改窗口扩展样式,所有参数都是可选参数,
@remove 用数值指定要移除的样式,可使用 WS_EX 前缀的常量
@add 用数值指定要添加的样式,可使用 WS_EX 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考 win.modifyStyle 函数源码
显示错误提示框
请先调用win.dlg.message.install安装此函数
显示皱眉图标提示框
请先调用win.dlg.message.install安装此函数
显示竖大拇指图标提示框
请先调用win.dlg.message.install安装此函数
显示提示框
请先调用win.dlg.message.install安装此函数
显示正确提示框
请先调用win.dlg.message.install安装此函数
显示微笑图标提示框
请先调用win.dlg.message.install安装此函数
显示倒竖大拇指图标提示框
请先调用win.dlg.message.install安装此函数
显示警告提示框
请先调用win.dlg.message.install安装此函数
弹出对话框,可选用参数@2指定标题
弹出错误对话框,可选用参数@2指定标题
弹出询问对话框,可选用参数@2指定标题
staticObject.onDestroy = function(){
/*窗口销毁前触发*/
}
staticObject.oncommand = function(id,event){
/*命令事件触发*/
}
staticObject.onnotify = function(id,code,ptr){
/*通知事件触发*/
}
如果当前是子窗口,
移除窗口的WS_CHILD样式,使窗口孤立出来悬浮于原位置,
悬浮窗口如影随形的跟随父窗口移动或改变大小,控件原来的固定边距等参数仍然有效
创建悬浮窗口。
悬浮窗口是模仿子窗口外观效果的独立窗口,父窗口可自动调整子窗口到设定位置。
可选参数 @transparent 为 true 则转换为分层透明窗口。
可选利用 @hwndBuddy 参数指定外部进程窗口句柄的并附加在内部控件上以实现相同的效果。
伙伴窗口总是会保持在悬浮窗口前面,并保持相同的大小、位置。
可重复调用此函数更换伙伴窗口,旧的伙伴窗口必须自行关闭。
可选指定 @borderless 参数 为 true 以移除 @hwndBuddy 的窗口边框。
投递窗口消息到消息队列中
此函数用法请参考 ::User32.PostMessage
staticObject.preadjust = function( cx,cy,wParam ) {
/*窗口缩放后重绘前、触发 adjust 事件之前触发此事件。
所有 win.form 创建的窗体和控件都支持此事件,
与 adjust 事件不同,对 preadjust 重复赋值则覆盖而不是追加事件。
cx 参数为窗口宽度,cy 参数为窗口高度,
wParam 为 _WM_SIZE 消息参数。*/
};
在窗口所在界面线程发布消息,
运行界面线程所有所有调用subscribe函数订阅此消息的函数,
可添加任意个触发参数
刷新
刷新
透明背景时请使用此函数替代redraw()
staticObject.reduce(
{/*在这里指定要遍历处理每个元素的数组或表,
并在回调函数中返回每次需要间隔的延时,以毫秒为单位,返回0或空值中断处理,
回调参数为下一个元素的值和索引,处理完后回调参数为null,
如果此时未返回null或0退出处理函数,将返回第一个元素继续遍历*/},
function(value,index){
if(value){
return 50
}
}
)
staticObject.reduce(
{/*@array 参数指定要循环处理每个元素的数组或表。
@array 指定为 false 则取消之前创建的防抖单例循环。
@callback 指定回调函数。
回调函数中可返回本次间隔延时,以毫秒为单位。
返回 0、null、false、以及不能转换为非 0 数的值中断处理。
回调参数为下一个元素的值和索引,处理到数组尾部时回调参数为 null,
如果此时仍然返回可转换为非 0 数的值,将转到第一个数组元素重复循环
@callback 指定回调函数。
@debounce 指定是否创建为防抖单例循环,默认为 true。*/},
function(value,index){
if(value){
return 50
}
}
)
按设计时位置参数、重新调整控件位置以适应窗口当前缩放比例。
父窗口缩放时会自动执行此操作。
默认在启动窗口消息循环时会自适应调整所有控件。
所以在启动消息循环前添加控件不必调用此函数
如果指定了参数则调整窗口大小,
无论是否实际调整窗口大小,发送 _WM_SIZE 消息给窗口
右侧坐标
根据控件当前位置、缩放比例,更新控件的设计时位置参数。
以避免下次窗口缩放自适应调整控件当前位置更改被清除,
控件所有调整位置的属性或成员函数已自动调用此函数。
发送窗口消息
此函数用法请参考 ::User32.SendMessage
设置焦点
指定 LOGFONT 字体对象,或逻辑字体句柄
如果不指定 point 值并指定 h 值,字体会按控件的 DPI 缩放设置自动缩放。
staticObject.setFont(h=-12;name="Tahoma");
staticObject.setInterval(回调函数,延时毫秒数,...setInterval(
function(){
/*参数@1指定执行函数,参数@2指定执行间隔,
可选指定一个或多个回调参数,不指定回调参数则默认为:
hwnd,message,timerId,tick,
如果在定时器中执行了win.delay等继续消息循环的代码,
在定时器退出前不会再触发同一定时器(重入)。
定时器回调函数返回数值可修改时间间隔,
返回false取消该定时器*/
},1000
)
改变父窗口
调整窗口位置或排序,所有参数可选
同时指定x,y坐标则移动位置
同时指定宽高则改变大小
指定插入位置(句柄或_HWND前缀常量)则调整Z序
设置控件区块位置(::RECT结构体)
设置控件屏幕区块位置(::RECT结构体)
禁止重绘
恢复重绘
推迟执行指定的函数或代码
此函数异步执行参数中指定的函数,不会阻塞当前代码继续执行,
延时参数是可选参数,以毫秒为单位,默认为0毫秒
可选用附加参数指定调用延时函数的实参
返回值为定时器ID
显示控件
获取下一个支持tab控制焦点的控件
参数@1为true会自动移动焦点到该控件
参数@2为true则获取上一个控件,否则获取下一个控件
控件文本
外观主题,例如
winform.button.theme = "Explorer"
winform.button.theme = false
开启此控件的跨线程调用功能
顶部坐标
staticObject.translateAccelerator = function(msg){
if( msg.wParam == 0x20/*_VK_SPACE*/ & msg.message = 0x101/*_WM_KEYUP*/){
return true;/*返回是否快捷键,适用窗体或普通控件对象
仅当前窗口内的按键触发此事件
msg 参数为包含窗口按键消息的 ::MSG 结构体*/
}
}
允许转发转发子窗口的命令(_WM_COMMAND)与通知(_WM_NOTIFY)消息,
避免子窗口 oncommand,onnotify 等回调失效。
同时会处理子窗口的 _WM_CTLCOLORSTATIC 等消息,
以避免部分外观属性失效
创建嵌入控件,返回控件容器对象,
容器对象的 _object 成员是创建的 COM 对象,
容器对象可通过添加成员函数响应 COM 对象事件,
容器对象的主要作用是充当访问 COM 对象的中间代理对象。
通常使用 util.metaProperty 为容器对象添加属性元表,
属性元表可拦截属性、函数调用并调用 _object 对象,
createEmbedEx 返回的容器已添加默认代理以直接访问 COM 对象
创建嵌入控件,返回控件容器对象,
容器对象的 _object 成员是创建的 COM 对象,
容器对象可通过添加成员函数响应 COM 对象事件,
容器对象的主要作用是充当访问 COM 对象的中间代理对象,
@clsId 指定控件 CLSID,
可选在参数@2中指定 COM 对象绑定的容器对象
成功返回容器对象,失败返回false,错误信息
重绘invalidate函数指定的区块
窗口是否有效,
窗口未关闭返回 true ,
窗口已关闭或正在关闭返回 false
循环执行等待函数,并等待返回值
直到等待函数返回非空值,或存在第二个返回值,或当前窗口关闭
等待函数返回的值就是wait函数的返回值,
如果指定超时,超过指定毫秒时返回null,
除等待函数以外,所有参数可选
宽度
staticObject.wndproc = function(hwnd,message,wParam,lParam){
/*窗口消息回调,返回任意非null值阻止默认回调
wndproc重复赋值时追加函数而不是覆盖之前的回调
设为null添除所有消息回调函数
wndproc也可以是一个表,键要为处理的消息,值为对应的消息回调函数*/
}