OnNotify (GUI)

注册一个函数或方法, 当通过 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 使用 idFrom 和 hwndFrom 字段来识别是哪个控件发送的通知, 以便将其派遣到相应的对象. code 字段包含通知代码. 由于这些字段必须与用于注册回调的 GuiCtrl 和 NotifyCode 相匹配, 所以它们对脚本很少有用.

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

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