aardio 文档
aardio 范例: _WM_COMMAND 消息与 oncommand 事件
//响应控件命令
import win.ui;
/*DSG{{*/
var winform = win.form(text="_WM_COMMAND 消息与 oncommand 事件";right=759;bottom=411)
winform.add(
edit={cls="edit";text="请在运行本程序后修改这里的文本试试";left=15;top=11;right=747;bottom=193;edge=1;multiline=1;z=1};
editTip={cls="edit";left=15;top=212;right=747;bottom=394;edge=1;multiline=1;readonly=1;z=2}
)
/*}}*/
/**************
一个窗口内的控件发生了一些事情,需要通知父窗口,就会发送 _WM_COMMAND 或者 _WM_NOTIFY 消息给父窗口.
最初Windows 3.x 就有的标准控件(Standard Controls),如Edit,Combobox,Listbox,Button等,发送的控件通知消息的格式是 WM_COMMAND;
而后期的 Win32 通用控件(Common Controls),如List View,Image List,IP Address,Tree View,Toolbar 等,发送的都是 WM_NOTIFY 控件通知消息。
另外,当用户选择菜单的一个命令项,也会发送 _WM_COMMAND 消息。
早期开发桌面软件使用的是 C++ 这样的静态语言,通常主要代码都是写在父窗口中,所以这种通知父窗口的消息一定意义上来说提供了方便。
但是在 aardio 这样的动态语言中这种方式意义不大,在父窗口上处理所有子控件的消息其实是相对麻烦且不必要的,所以 aardio 将这些消息重新发回给控件对象自己处理。
在 aardio 中通过控件的 oncommand 函数处理自身发出的 _WM_COMMAND 消息,
通过控件的 onnotify 函数处理自身发出的 _WM_NOTIFY 消息。
在 aardio 开发环境的窗体设计器中,右键点击控件,
在弹出菜单中点击「响应命令」就可以为该控件添加 oncommand 函数。
在弹出菜单中点击「响应通知」就可以为该控件添加 onnotify 函数。
窗口控件库参考文档:
https://docs.microsoft.com/zh-cn/windows/win32/controls/individual-control-info
**************/
winform.edit.oncommand = function(id,event){
if(event == 0x300/*_EN_CHANGE*/){
winform.editTip.print("winform.edit.oncommand 回调函数中收到了文本变更通知")
}
}
/**************
标准库中的控件,有一些常用的事件也可以通过特定的事件函数来处理,
实现这个功能请右键点代码中的 winform.edit ,在弹出菜单中点「跳转到定义」查看源码。
edit 控件源码定义 onChange 函数的代码为:this._commandFuncnames ={[0x300/*_EN_CHANGE*/]="onChange"}
**************/
winform.edit.onChange = function(){
winform.editTip.print("winform.edit.onChange 回调函数中收到了文本变更通知")
}
/*
oncommand 回调函数中第一个参数是控件 ID,这基本不什么用,
最重要的是回调函数的第二个参数 event,也就是事件代码,通过事件代码可以判断发生了什么事件,
标准控件(Standard Controls) 常用的事件代码如下:
编辑框
_EN_CHANGE编辑框中的文本己更新
_EN_ERRSPACE编辑框内存不足
_EN_HSCROLL用户点击了水平滚动条
_EN_KILLFOCUS编辑框正在失去输入焦点
_EN_MAXTEXT插入的内容被截断
_EN_SETFOCUS编辑框获得输入焦点
_EN_UPDATE编辑框中的文本将要更新
_EN_VSCROLL用户点击了垂直滚动条消息含义
按扭
_BN_CLICKED 用户单击了按钮
_BN_DISABLE 按钮被禁止
_BN_DOUBLECLICKED 用户双击了按钮
_BN_HILITE 用户加亮了按钮
_BN_PAINT 按钮应当重画
_BN_UNHILITE 加亮应当去掉
组合框
_CBN_CLOSEUP 组合框的列表框被关闭
_CBN_DBLCLK 用户双击了一个字符串
_CBN_DROPDOWN 组合框的列表框被拉出
_CBN_EDITCHANGE 用户修改了编辑框中的文本
_CBN_EDITUPDATE 编辑框内的文本即将更新
_CBN_ERRSPACE 组合框内存不足
_CBN_KILLFOCUS 组合框失去输入焦点
_CBN_SELCHANGE 在组合框中选择了一项
_CBN_SELENDCANCEL 用户的选择应当被取消
_CBN_SELENDOK 用户的选择是合法的
_CBN_SETFOCUS 组合框获得输入焦点
列表框
_LBN_DBLCLK用户双击了一项
_LBN_ERRSPACE列表框内存不够
_LBN_KILLFOCUS列表框正在失去输入焦点
_LBN_SELCANCEL选择被取消
_LBN_SELCHANGE选择了另一项
_LBN_SETFOCUS列表框获得输入焦点
*/
winform.show();
win.loopMessage();
Markdown 格式