static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, ref LV_COLUMN lParam);
private static extern IntPtr SendMessage(IntPtr Handle, int msg, IntPtr wParam, ref LV_COLUMN lParam);
/// <summary> /// Gets an array of ColumnHeaders from a ListView in the order in which they are actually displayed. /// </summary> /// <param name="list">The ListView to get the ordered columns from.</param> /// <returns>ColumnHeaders in the ListView, in display order.</returns> public static ColumnHeader[] GetOrderedColumns(this ListView list) { List<OrderedColumn> cols = new List<OrderedColumn>(); foreach(ColumnHeader col in list.Columns) { LV_COLUMN pcol = new LV_COLUMN(); pcol.mask = LVCF_ORDER; SendMessage(list.Handle, LVM_GETCOLUMN, new IntPtr(col.Index), ref pcol); cols.Add(new OrderedColumn(col, pcol.iOrder)); } cols.Sort(); ColumnHeader[] ret = new ColumnHeader[cols.Count]; for(int i = 0; i < cols.Count; i++) ret[i] = cols[i].Column; return ret; }
internal static extern IntPtr SendLVMessage(IntPtr hWnd, uint msg, IntPtr wParam, ref LV_COLUMN lParam);