窗口控件参考文档 | 如果需要创建处理更多事件的按钮应该改用 plus 控件。
//窗口程序 - 响应控件命令
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){
/***
- 参数 id 表示控件 ID,在 aardio 中基本用不上。
- 参数 event 表示事件代码
标准库中的控件通常不需要在这里处理 event 参数,
常用的事件代码一般都提供了特定的事件函数,
例如通过 winform.edit.onChange 事件可响应文本变更。
右键点选代码中的 winform.edit ,
在右键弹出菜单中点「跳转到定义」查看源码。
在 edit 控件源码定义 onChange 事件的代码为:
this._commandFuncnames ={[0x300/*_EN_CHANGE*/]="onChange"}
***/
if(event == 0x300/*_EN_CHANGE*/){
winform.editTip.print("winform.edit.oncommand 回调函数中收到了文本变更通知")
}
}
/*
oncommand 回调函数中第一个参数是控件 ID,这基本没什么用,
而回调函数的第二个参数 event 就是不同控件定义的事件通知代码(Control-defined notification code),
通过事件代码可以判断发生了什么事件。
在 aardio 中控件的常用事件都有特定的事件函数可用,一般不需要自己去处理这个 event 参数。
例如 winform.edit.onChange 事件用于响应 _EN_CHANGE 事件。
标准控件(Standard Controls) 常用的事件代码如下(更多细节请查看微软文档):
## 编辑框:
_EN_CHANGE 编辑框中的文本己更新
_EN_ERRSPAC 编辑框内存不足
_EN_HSCROLL 用户点击了水平滚动条
_EN_KILLFOCUS 编辑框正在失去输入焦点
_EN_MAXTEXT 插入的内容被截断
_EN_SETFOCUS 编辑框获得输入焦点
_EN_UPDATE 编辑框中的文本将要更新
_EN_VSCROLL 用户点击了垂直滚动条消息含义
按钮,单选框、复选框:
_BN_CLICKED 用户单击了按钮
这些控件的其他事件代码在 aardio 中基本不会用到。
如果需要创建处理更多事件的按钮应该改用 plus 控件。
https://www.aardio.com/zh-cn/docs/library-guide/std/win/ui/ctrl/plus.html
> 按钮,单选框、复选框的`窗口类名`实际都是 "button",只是样式不同。
## 组合框:
_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 格式