【第二章2.6】基础知识 -- 响应控件命令 ☆☆【重要】☆☆
//响应控件命令 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();
也可以配合消息查询工具:
相关回复
-
暂无评论!