public unsafe int NearestIndex(Point pt) { var lvInsertMark = new LVINSERTMARK { cbSize = (uint)sizeof(LVINSERTMARK) }; User32.SendMessageW(listView, (User32.WM)LVM.INSERTMARKHITTEST, (nint)(&pt), ref lvInsertMark); return(lvInsertMark.iItem); }
internal unsafe void UpdateListView() { Debug.Assert(listView.IsHandleCreated, "ApplySavedState Precondition: List-view handle must be created"); var lvInsertMark = new LVINSERTMARK { cbSize = (uint)sizeof(LVINSERTMARK), dwFlags = appearsAfterItem ? LVIM.AFTER : LVIM.BEFORE, iItem = index }; User32.SendMessageW(listView, (User32.WM)LVM.SETINSERTMARK, 0, ref lvInsertMark); if (!color.IsEmpty) { User32.SendMessageW(listView, (User32.WM)LVM.SETINSERTMARKCOLOR, 0, color.ToWin32()); } }