Thread: [Mwinapi-commits] SF.net SVN: mwinapi:[137] trunk/ManagedWinapi/Windows/SystemListView.cs
Status: Beta
Brought to you by:
schierlm
From: <sch...@us...> - 2015-12-11 17:45:34
|
Revision: 137 http://sourceforge.net/p/mwinapi/code/137 Author: schierlm Date: 2015-12-11 17:45:31 +0000 (Fri, 11 Dec 2015) Log Message: ----------- SystemListView: added methods to retrieve and modify the selection % pushed from GitHub % Author: fk <enoon1 at arcor.de> % Date: Fri Dec 11 15:01:16 2015 +0100 Modified Paths: -------------- trunk/ManagedWinapi/Windows/SystemListView.cs Modified: trunk/ManagedWinapi/Windows/SystemListView.cs =================================================================== --- trunk/ManagedWinapi/Windows/SystemListView.cs 2015-12-11 17:45:25 UTC (rev 136) +++ trunk/ManagedWinapi/Windows/SystemListView.cs 2015-12-11 17:45:31 UTC (rev 137) @@ -59,6 +59,17 @@ } /// <summary> + /// The number of selected items (icons) in this list view. + /// </summary> + public int SelectedItemsCount + { + get + { + return sw.SendGetMessage(LVM_GETSELECTEDCOUNT); + } + } + + /// <summary> /// An item of this list view. /// </summary> public SystemListViewItem this[int index] @@ -70,6 +81,69 @@ } /// <summary> + /// Ensures that a list-view item is either entirely or partially visible, scrolling the list-view control if necessary. + /// </summary> + /// <param name="rowIndex">Index of the row.</param> + /// <param name="entirelyVisible">if set to <c>true</c> the item will be entirely visible.</param> + public void EnsureItemIsVisible(int rowIndex, bool entirelyVisible) + { + SystemWindow.SendMessage(new HandleRef(sw, sw.HWnd), LVM_ENSUREVISIBLE, new IntPtr(rowIndex), new IntPtr(entirelyVisible ? 1 : 0)); + } + + /// <summary> + /// Sets the focused-state of the item. + /// </summary> + /// <param name="rowIndex">Index of the row.</param> + /// <param name="focused">if set to <c>true</c> the item will be focused.</param> + public void SetItemFocusedState(int rowIndex, bool focused) + { + LVITEM lvi = new LVITEM(); + lvi.stateMask = (uint)(ListViewItemState.LVIS_FOCUSED); + lvi.state = focused ? (uint)(ListViewItemState.LVIS_FOCUSED) : 0; + ProcessMemoryChunk lc = ProcessMemoryChunk.AllocStruct(sw.Process, lvi); + SystemWindow.SendMessage(new HandleRef(sw, sw.HWnd), LVM_SETITEMSTATE, new IntPtr(rowIndex), lc.Location); + lc.Dispose(); + } + + /// <summary> + /// Sets the selected-state of the item. + /// </summary> + /// <param name="rowIndex">Index of the row.</param> + /// <param name="selected">if set to <c>true</c> the item will be selected.</param> + public void SetItemSelectedState(int rowIndex, bool selected) + { + LVITEM lvi = new LVITEM(); + lvi.stateMask = (uint)(ListViewItemState.LVIS_SELECTED); + lvi.state = selected ? (uint)(ListViewItemState.LVIS_SELECTED) : 0; + ProcessMemoryChunk lc = ProcessMemoryChunk.AllocStruct(sw.Process, lvi); + SystemWindow.SendMessage(new HandleRef(sw, sw.HWnd), LVM_SETITEMSTATE, new IntPtr(rowIndex), lc.Location); + lc.Dispose(); + } + + /// <summary> + /// Clears the current selection by unselecting all selected rows. + /// </summary> + public void ClearSelection() + { + for (int rowIndex = 0; rowIndex < this.Count; rowIndex++) + { + SetItemSelectedState(rowIndex, false); + } + } + + /// <summary> + /// Sets the given row as single-selection and ensures that the row is visible. + /// </summary> + /// <param name="rowIndex">Index of the row ttaht should be highlighted.</param> + public void HighlightRow(int rowIndex) + { + ClearSelection(); + SetItemSelectedState(rowIndex, true); + SetItemFocusedState(rowIndex, true); + EnsureItemIsVisible(rowIndex, false); + } + + /// <summary> /// A subitem (a column value) of an item of this list view. /// </summary> public SystemListViewItem this[int index, int subIndex] @@ -140,7 +214,10 @@ LVM_GETITEMPOSITION = (0x1000 + 16), LVM_GETITEMCOUNT = (0x1000 + 4), LVM_GETITEM = 0x1005, - LVM_GETCOLUMN = (0x1000 + 25); + LVM_ENSUREVISIBLE = (0x1000 + 19), + LVM_GETCOLUMN = (0x1000 + 25), + LVM_SETITEMSTATE = (0x1000 + 43), + LVM_GETSELECTEDCOUNT = (0x1000 + 50); private static readonly uint LVIF_TEXT = 0x1, LVIF_IMAGE = 0x2, @@ -177,6 +254,13 @@ #endregion } + [Flags] + internal enum ListViewItemState + { + LVIS_FOCUSED = 0x0001, + LVIS_SELECTED = 0x0002 + } + /// <summary> /// An item of a list view. /// </summary> @@ -207,6 +291,16 @@ public int Image { get { return image; } } /// <summary> + /// The appearance of a selected item depends on whether it has the focus and also on the system colors used for selection. + /// </summary> + public bool IsSelected { get { return (state & (uint)ListViewItemState.LVIS_SELECTED) != 0; } } + + /// <summary> + /// The item has the focus, so it is surrounded by a standard focus rectangle. Although more than one item may be selected, only one item can have the focus. + /// </summary> + public bool IsFocused { get { return (state & (uint)ListViewItemState.LVIS_FOCUSED) != 0; } } + + /// <summary> /// State bits of this item. /// </summary> [CLSCompliant(false)] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |