2009-11-17 6 views

Répondre

3

Vous pouvez obtenir les coordonnées de n'importe quel nœud avec la méthode GetDisplayRect. En outre, InvalidateNode vous dira les coordonnées du nœud que vous venez d'invalider.

Pour vos besoins, je ne pense pas que vous ayez besoin de connaître les coordonnées de n'importe quel nœud arbitraire, cependant. Au lieu de cela, vous devez savoir, lorsque vous peignez le nœud, si le nœud que vous peignez est chaud. Tous les événements owner-draw spécifiques au nœud vous indiquent à la fois le nœud actuel et les coordonnées, à l'exception de OnPaintText, qui ne vous indique que le nœud. Cependant, vous n'avez pas besoin de suivre le nœud actif actuel. Vérifiez simplement si Node = Sender.HotNode pour déterminer le style à utiliser pour peindre le nœud et son texte.

Vous pourriez peut-être éviter tout le problème. Le contrôle dispose déjà d'une bonne quantité de code spécifique aux nœuds actifs, il se peut donc qu'il s'agisse simplement de trouver les propriétés à configurer au lieu de devoir tout peindre soi-même.

+0

Le problème est que j'ai besoin de peindre la cellule du nœud différemment de la position actuelle de la souris. Par exemple, si j'ai 5 étoiles vierges peintes dans la cellule, alors si la souris est sous la troisième étoile, je veux dessiner ces étoiles comme des étoiles "sélectionnées". – Linas

+0

OK, puis ignorez le dernier paragraphe. Dans l'événement OnMouseMove, appelez 'InvalidateNode (HotNode)'. Dans l'événement paint, vérifiez la position actuelle de la souris. Ne faites pas votre peinture * dans * l'événement mouse-move. –

+0

Vous pouvez utiliser 'GetHitTestInfoAt()' avec la position actuelle du curseur pour savoir si le noeud que vous dessinez est le noeud sur lequel la souris est terminée. Appelez ceci dans votre événement paint, puis comparez 'HitInfo.HitNode' avec le noeud que vous peignez. – Nat

Questions connexes