/// <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); }
/// <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);