/// <summary> /// The set sort icon. /// </summary> /// <param name="listViewControl"> /// The list view control. /// </param> /// <param name="columnIndex"> /// The column index. /// </param> /// <param name="order"> /// The order. /// </param> /// <exception cref="Win32Exception"> /// </exception> public static void SetSortIcon(this ListView listViewControl, int columnIndex, SortOrder order) { IntPtr columnHeader = NativeMethods.SendMessage(listViewControl.Handle, (int)W32_LVM.LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero); for (int columnNumber = 0; columnNumber <= listViewControl.Columns.Count - 1; columnNumber++) { var columnPtr = new IntPtr(columnNumber); var item = new HDITEM { mask = W32_HDI.HDI_FORMAT }; if (NativeMethods.SendMessage(columnHeader, (int)W32_HDM.HDM_GETITEMW, columnPtr, ref item) == IntPtr.Zero) { throw new Win32Exception(); } if (order != SortOrder.None && columnNumber == columnIndex) { switch (order) { case SortOrder.Ascending: item.fmt &= ~W32_HDF.HDF_SORTDOWN; item.fmt |= W32_HDF.HDF_SORTUP; break; case SortOrder.Descending: item.fmt &= ~W32_HDF.HDF_SORTUP; item.fmt |= W32_HDF.HDF_SORTDOWN; break; } } else { item.fmt &= ~W32_HDF.HDF_SORTDOWN & ~W32_HDF.HDF_SORTUP; } if (NativeMethods.SendMessage(columnHeader, (int)W32_HDM.HDM_SETITEMW, columnPtr, ref item) == IntPtr.Zero) { throw new Win32Exception(); } } }
public static extern int SendMessage(IntPtr hWnd, W32_HDM msg, int wParam, ref HDITEM hditem);
public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, ref HDITEM lParam);
/// <summary> /// Set the sort icon for the column depending on the sort type /// </summary> /// <param name="columnIndex"> /// The column Index. /// </param> /// <param name="ascending"> /// The ascending. /// </param> private void SetSortIcon(int columnIndex, bool ascending) { IntPtr columnHeader = NativeMethods.SendMessage(this.Handle, (int)W32_LVM.LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero); for (int columnNumber = 0; columnNumber <= this.Columns.Count - 1; columnNumber++) { var columnPtr = new IntPtr(columnNumber); var item = new HDITEM { mask = W32_HDI.HDI_FORMAT }; if (NativeMethods.SendMessage(columnHeader, (int)W32_HDM.HDM_GETITEMW, columnPtr, ref item) == IntPtr.Zero) { throw new Win32Exception(); } if (columnNumber == columnIndex) { if (ascending) { item.fmt &= ~W32_HDF.HDF_SORTDOWN; item.fmt |= W32_HDF.HDF_SORTUP; } else { item.fmt &= ~W32_HDF.HDF_SORTUP; item.fmt |= W32_HDF.HDF_SORTDOWN; } } else { item.fmt &= ~W32_HDF.HDF_SORTDOWN & ~W32_HDF.HDF_SORTUP; } if (NativeMethods.SendMessage(columnHeader, (int)W32_HDM.HDM_SETITEMW, columnPtr, ref item) == IntPtr.Zero) { throw new Win32Exception(); } } }