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获得焦点,大家可以试试其它控件

2 - 控件通知消息的wm_command与wm_notify窗口消息

posted @   collin_pxy  阅读(390)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示