【第二章2.6】基础知识 -- 响应控件命令 ☆☆【重要】☆☆

贴主:admin| 发贴:2024-07-27 09:37| 浏量:32
Code aardioLine:92复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
    • //响应控件命令
    • 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();


    也可以配合消息查询工具:

    【个人作品 -- aardio】win消息查询工具 - 中医自学网 (666443.xyz)

    相关回复


      暂无评论!

    发表回复