具有相应 WinEvent 的批注属性
重写频繁更改的属性时要小心,尤其是客户端因 WinEvent ((如 State、 Value)而检查的属性,对于某些控件, Name 属性) 。
在许多情况下,尤其是对于 USER 和 ComCtl 控件,在通知控件所有者之前,将发送指示属性更改的 WinEvent, (通常通过 WM_NOTIFY) 。 在WM_NOTIFY处理程序中使用 SetPropValue 更新属性会太晚;使用上下文中挂钩的客户端已访问旧值。
可以通过使用回调服务器对象 (SetPropServer) 来处理这些类型的属性;但是,服务器无法使用WM_NOTIFY处理程序中更新的任何状态,因为尚未调用该处理程序。 例如, IAccPropServer::GetPropValue 回调对象应直接向控件发送消息,以获取其真实当前值,从而生成所需的属性,而不是使用在 WM_NOTIFY 处理程序中更新并过期的缓存当前值变量。