示例#1
0
        /// <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();
                }
            }
        }
示例#2
0
 public static extern int SendMessage(IntPtr hWnd, W32_HDM msg, int wParam, ref HDITEM hditem);
示例#3
0
 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();
                }
            }
        }