OnNotify

注册一个函数或方法, 当通过 WM_NOTIFY 消息接收到控制通知时调用.

GuiCtrl.OnNotify(NotifyCode, Callback , AddRemove)

参数

NotifyCode

类型: 整数

要监控的控件定义的通知代码.

Callback

类型: 字符串函数对象

事件发生时要调用的函数, 方法或对象.

如果 GUI 有事件接收器(即, 如果指定了 Gui()EventObj 参数), 那么这个参数可能是属于事件接收器的方法的名称. 否则, 这个参数必须是一个函数对象.

回调函数接受两个参数, 定义如下:

MyCallback(GuiCtrl, lParam) { ...

虽然你给参数的名字并不重要, 但是下面的值会依次赋给它们:

  1. 当前 GUI 控件的 GuiControl 对象.
  2. NMHDR 派生的通知结构的地址. 其确切类型取决于控件和通知代码的类型. 如果结构包含关于通知的附加信息, 回调函数可以使用 NumGet 和/或 StrGet 检索它.

如果不需要相应的信息, 你可以从回调参数列表的末尾省略一个或多个参数, 但在这种情况下, 必须指定星号作为最后一个参数, 例如 MyCallback(Param1, *).

OnEvent 注释中关于 this 和绑定函数的内容也适用于 OnNotify.

如果一个事件注册了多个回调函数, 则回调函数可能返回一个非空值, 以防止调用任何剩余的回调函数.

根据通知的不同, 回调函数的返回值可能有其他含义. 例如, 如果回调返回 TRUE(1), ListView 通知 LVN_BEGINLABELEDIT(-175 或 -105) 会阻止用户编辑标签.

AddRemove

类型: 整数

如果省略, 则默认为 1. 否则, 指定下列数字之一:

WM_NOTIFY

每当发生要监控事件或控件需要从程序中获取信息时, 某些类型的控件就会发送一条 WM_NOTIFY 消息. 该消息的 lParam 参数包含一个指向包含通知信息的结构的指针. 结构的类型取决于通知代码和触发通知的控件类型, 但总是基于 NMHDR.

要确定哪些通知是可用的(如果有的话), 它们提供的结构类型以及它们如何解释返回值, 请参考控件的文档. Control Library (Microsoft Docs) 包含了每个 Windows 常用控件的链接. 通知代码(编号) 可以在 Windows SDK 中找到, 或者在互联网上搜索.

AutoHotkey 使用 idFromhwndFrom 字段来识别是哪个控件发送的通知, 以便将其派遣到相应的对象. code 字段包含通知代码. 由于这些字段必须与用于注册回调的 GuiCtrlNotifyCode 相匹配, 所以它们对脚本很少有用.

OnEvent 的说明也适用于 OnNotify: 线程, 销毁 GUI.

OnCommand 可以用于作为 WM_COMMAND 消息发送的通知.