Exemplo n.º 1
0
 /// <summary>
 /// Gets item from point, and its part.
 /// Returns false if not on an item.
 /// </summary>
 /// <param name="p">Point in control coordinates. Physical pixels.</param>
 /// <param name="h">Results.</param>
 public bool HitTest(POINT p, out TVHitTest h)
 {
     h = default;
     if ((uint)p.x < _width && (uint)p.y < _height)
     {
         int i = _ItemFromY(p.y);
         if (_IndexToItem(i, out var v))
         {
             h.index = i;
             h.item  = v;
             _GetPartOffsets(i, out var k);
             int x = p.x;
             if (x < k.checkbox)
             {
                 h.part = TVParts.Left;
             }
             else if (x < k.marginLeft)
             {
                 h.part = TVParts.Checkbox;
             }
             else if (x < k.image)
             {
                 h.part = TVParts.MarginLeft;
             }
             else if (x < k.text)
             {
                 h.part = TVParts.Image;
             }
             else if (x < k.marginRight)
             {
                 h.part = TVParts.Text;
             }
             else if (x < k.right)
             {
                 h.part = TVParts.MarginRight;
             }
             else
             {
                 h.part = TVParts.Right;
             }
             return(true);
         }
     }
     h.index = -1;
     return(false);
 }
Exemplo n.º 2
0
 /// <summary>
 /// Gets item from mouse, and its part.
 /// Returns false if not on an item.
 /// </summary>
 /// <param name="h">Results.</param>
 public bool HitTest(out TVHitTest h) => HitTest(_w.MouseClientXY, out h);