Propriétés d’annotation qui ont des événements WinEvent correspondants
Soyez prudent lorsque vous remplacez les propriétés qui changent fréquemment, en particulier celles qui sont examinées par les clients à la suite d’un événement WinEvent (par exemple, State, Value et, pour certains contrôles, les propriétés Name ).
Dans de nombreux cas, en particulier pour les contrôles USER et ComCtl, l’événement WinEvent signalant une modification de propriété est envoyé avant que le propriétaire du contrôle soit averti (généralement via WM_NOTIFY). La mise à jour de la propriété à l’aide de SetPropValue dans le gestionnaire de WM_NOTIFY sera trop tard ; les clients utilisant le hooking en contexte auront déjà accédé à l’ancienne valeur.
Vous pouvez gérer ces types de propriétés à l’aide d’objets serveur de rappel (à l’aide de SetPropServer) ; Toutefois, le serveur ne peut pas utiliser d’état mis à jour dans le gestionnaire de WM_NOTIFY, car ce gestionnaire n’a pas encore été appelé. Par exemple, au lieu d’utiliser une variable de valeur actuelle mise en cache qui est mise à jour dans le gestionnaire WM_NOTIFY et qui sera obsolète, l’objet de rappel IAccPropServer::GetPropValue doit envoyer un message directement au contrôle pour obtenir sa valeur actuelle réelle afin de générer la propriété requise.