aardio 快速入门
一、弹窗变量
控制台 console
1 - console.getNumber
import console;
//暂停并等待输入有效的数值,返回的变量num是一个数值类型的变量
var num = console.getNumber( "请输入数值:" )
//输出num的值,这里没有作变量转换类型,console.log会直接将变量转换为字符串类型
console.log("您输入的是" ,num );
//暂停是必需的,不然程序就结束了,窗口会一闪而过
console.pause(true);
运行结果
2 - 变量及输出(反序列化)
import console;
//定义三种类型的值
var num = 666
var str = "你好"
var tab = {"abc";123;456}
var tab2 = {d=1;f="不错";888}
//支持多个参数显示变量的值
console.log(num,str)
//表的显示有几个函数,作用大致相同,看习惯使用: dumpTable(tab)、 dump(tab,tab2) 、varDump(tab,tab2)
//显示一个表的字符串形式,不支持多个参数
console.dumpTable(tab)
console.log("=================")
//显示一个表的字符串形式,支持多个参数
console.dump(tab,tab2)
console.log("=================")
//详细显示表,包括类型和值,支持多个参数
console.varDump(tab,tab2)
console.log("=================")
//显示并暂停
console.logPause("演示结束",num,str)
运行结果
win 窗口
1 - 弹窗显示变量值
import win
//同样是定义三种类型的值
var num = 666
var str = "你好"
var tab = {"abc";123;456}
//使用win.msgbox函数可以将三种类型都转换为字符串显示
win.msgbox(num)
win.msgbox(str)
win.msgbox(tab)
运行结果
2 - 窗户设计
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="Button";left=278;top=74;right=448;bottom=139;z=1};
edit={cls="edit";text="我是文本框中的文字";left=74;top=171;right=709;bottom=420;edge=1;multiline=1;z=2}
)
/*}}*/
//在里面写入的代码,单击按钮会被触发
winform.button.oncommand = function(id,event){
//定义一个变量接收edit控件的文本值
var str= winform.edit.text
winform.msgbox(str)
winform.msgSmile(str) //输入winform.msg...看提示还有多种表情模式
}
winform.show();
win.loopMessage();
运行结果
二、窗口消息
0x205 _WM_RBUTTONUP 鼠标在客户区右键弹起时
1 - 窗口过程函数(类似VBA中的事件)- 在窗口中点击右键时,弹出鼠标位置坐标
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
//这个就是生成的回调函数,可以截取窗口wm_开头的消息 winform.wndproc - 窗口过程函数 回调附加参数 - lParam
//wParam和lParam在 Windows 编程中用于传递特定于消息的附加信息,理解它们的含义对于正确处理各种窗口消息至关重要。
//wParam: 在某些鼠标消息中,wParam可能包含鼠标按键的状态标志,比如左键按下、右键按下等状态的组合值
//lParam: 当处理鼠标右键弹起消息(如下面代码中的0x205消息)时,通过win.getMessagePos(lParam)可以从lParam中获取鼠标的坐标位置
winform.wndproc = function(hwnd,message,wParam,lParam){
select( message ) {
case 0x205/*_WM_RBUTTONUP*/{
//鼠标右键弹起,下面获取坐标
var x,y = win.getMessagePos(lParam);
//弹出消息框显示鼠标所在位置
winform.msgbox("X坐标:" + x +" Y坐标:" + y,"右键位置")
}
}
//无返回值则继续调用默认回调函数
}
winform.show();
win.loopMessage();
运行结果
0x201 _WM_LBUTTONDOWN 鼠标在客户区按下左键时
2 - 窗口过程函数(类似VBA中的事件)- 在窗口中点击右键时,弹出鼠标位置坐标
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=472;bottom=368;border="none")
winform.add()
/*}}*/
winform.wndproc = function(hwnd,message,wParam,lParam){
select( message ) {
//鼠标在客户区按下左键时
case 0x201/*_WM_LBUTTONDOWN*/{
//这是封装好的函数,模拟拖动窗口
winform.hitCaption()
}
}
//无返回值则继续调用默认回调函数
}
winform.show();
win.loopMessage();
运行结果- 略
非客户区消息: 消息类型:0x112 _WM_SYSCOMMAND wParam 命令类型:0xF060 _SC_CLOSE 关闭命令
3 - 窗口过程函数(类似VBA中的事件)- 关闭窗口时
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
import win.dlg.message
winform.wndproc = function(hwnd,message,wParam,lParam){
select( message ) {
//判断message是否wm_syscommand
case 0x112/*_WM_SYSCOMMAND*/{
//再继续判断参数wParam是否sc_close命令类型
if (wParam = 0xF060/*_SC_CLOSE*/) {
winform.msgGreat("窗口要关闭了!")
}
}
}
//无返回值则继续调用默认回调函数
}
winform.show();
win.loopMessage();
运行结果
图标菜单和按钮区消息 onclose事件
4 - 窗口过程函数(类似VBA中的事件)- 关闭窗口时
当我们使用窗口回调函数完成后,程序会将控制权交回窗口默认回调函数处理,比如上面弹出消息框后交回默认回调函数来关闭窗口!
需要注意的是,窗口回调函数会处理很多消息,里面有消息循环,如果我们给它一个返回值,那么窗口就陷入循环中卡死状态!
如要阻止关闭窗口,可以在winform.onClose函数里return false 阻止窗口关闭,winform.on...是已经将窗口消息进一步封装成事件更加方便使用,大家可以尝试其它事件。下面onclose,就是处理wm_close消息的
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
//onclose事件中
winform.onClose = function(hwnd,message,wParam,lParam){
//阻止窗口关闭,这时就算用alt+f4也关不了,只有用任务管理器关了 :)
return false;
}
winform.wndproc = function(hwnd,message,wParam,lParam){
select( message ) {
case 0x205/*_WM_RBUTTONUP*/{
//鼠标右键弹起,下面获取坐标
var x,y = win.getMessagePos(lParam);
}
else{
}
}
//无返回值则继续调用默认回调函数
}
winform.show();
win.loopMessage();
运行结果: 窗口不能被关闭,只能杀进程关闭
三、控件通知消息
1 - 控件命令消息和控件通知消息
(1) - 控件命令消息
标题说的控件有两种消息。第一种“控件命令消息”,一般直接叫“控件消息”,本人的理解是由我们主动发送给控件用以获取或改变控件的消息,例如EM_SETSEL 我们向edit控件发送这个消息来设置选区,又如CB_GETCOUNT,我们向combobox控件发送这个消息来获取项目数量。这些消息可以用上一章所用的工具查看:
这些控件消息我们一般不必记住,因为大部分都已经封装成控件的函数,如上面提到的EM_SETSEL已经封装为edit控件的setsel函数
在后面的章节中我们会介绍一些常用的控件函数,在这一章我们主要讲控件通知消息,所以我们先点到即止
(2) - 控件通知消息/控件通知代码
控件通知消息在msdn中实际英文是Control Notification Codes (控件通知代码),它是包含在WM_COMMAND或WM_NOTIFY窗口消息中的通知代码,一般我们直接叫“控件通知消息”。前缀一般以控件名+N,如BN_前缀(button notification)、EN_前缀(Edit notification)。为了区分消息,下面以控件通知代码叫法。
控件通知代码,是指一个窗口内的子控件发生了一些事情,需要通知父窗口,这时会向父窗口发送WM_COMMAND或WM_NOTIFY窗口消息,而控件通知代码在这消息的参数中,表示控件发生了那些变化。
举个例子,当我们点击按钮button控件时,button控件向它的父窗口发送wm_command消息,消息的wParam参数包含了此消息的控件id(button的id)和控件通知代码(bn_clicked),下面两图是查询工具和在msdn中查到的便于理解。
下面我们来实际操作,在实际操作中窗口接收到的wm_command和wm_notify消息在aar中已经封装成好用的事件函数,oncommand和onnotify我们并不需要关心太多的细节(如wParam取低位字节和高位字节)。建立一个空白窗口,再拖放一个按钮控件:
Button 类型的控件只有一个事件类型:event = 0/_BN_CLICKED/
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="Button";left=285;top=159;right=450;bottom=253;z=1}
)
/*}}*/
//oncommand就是窗口wm_command消息封装函数,
//参数id是控件id,event就是控件通知代码
winform.button.oncommand = function(id,event){
//判断通知代码是否为bn_clicked -- 对于 button控件的单击事件只有 0 一个类型,因此不判断也行
if (event = 0/*_BN_CLICKED*/) {
winform.msgboxTest("点击了吗?")
}
}
winform.show();
win.loopMessage();
edit 类型的控件有很多事件类型
点击外edit的控件通知代码还有很多,所以oncommand中必须进行判断再写执行代码
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
edit={cls="edit";text="Edit";left=243;top=171;right=435;bottom=225;edge=1;multiline=1;z=1}
)
/*}}*/
winform.edit.oncommand = function(id,event){
//显示接收到的通知代码,运行后点击文本框会出现两次消息框:获得焦点0x100/*_EN_SETFOCUS*/,失去焦点0x200/*_EN_KILLFOCUS*/通知代码
//winform.msgboxTest("通知代码:" + tostring(event,16))
//判断通知代码是否为_EN_SETFOCUS 获得焦点
if (event = 0x100/*_EN_SETFOCUS*/) {
winform.msgboxTest("Edit 获得焦点通知代码:" + tostring(event,16))
}
}
winform.show();
win.loopMessage();
上述代码可以看出 Edit 控件有不止一个控件通知代码,实际上 Edit 控件还有更多控件通知代码:
aardio 一些控件的通知代码再进一步封装成好用的函数不需要再判断,使用方法输入”控件.on”前缀智能提示就出来了:),如下图edit获得焦点,大家可以试试其它控件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY