Exemple #1
0
        public static void SetSortIcon(this ListView listView, int columnIndex, SortOrder order)
        {
            var hr           = new HandleRef(listView, listView.Handle);
            var columnHeader = SendMessage(hr, ComCtl32.ListViewMessage.LVM_GETHEADER, 0, IntPtr.Zero);
            var chr          = new HandleRef(listView, columnHeader);

            for (var columnNumber = 0; columnNumber <= listView.Columns.Count - 1; columnNumber++)
            {
                // Get current ListView column info
                var lvcol = new ComCtl32.LVCOLUMN(ComCtl32.ListViewColumMask.LVCF_FMT);
                SendMessage(hr, ComCtl32.ListViewMessage.LVM_GETCOLUMN, columnNumber, lvcol);

                // Get current header info
                var hditem = new ComCtl32.HDITEM(ComCtl32.HeaderItemMask.HDI_FORMAT | ComCtl32.HeaderItemMask.HDI_DI_SETITEM);
                SendMessage(chr, ComCtl32.HeaderMessage.HDM_GETITEM, columnNumber, hditem);

                // Update header with column info
                hditem.Format |= (ComCtl32.HeaderItemFormat)((uint)lvcol.Format & 0x1001803);
                if ((lvcol.Format & ComCtl32.ListViewColumnFormat.LVCFMT_NOTITLE) == 0)
                {
                    hditem.ShowText = true;
                }

                // Set header image info
                if (order != SortOrder.None && columnNumber == columnIndex)
                {
                    hditem.ImageDisplay = (order == SortOrder.Descending) ? ComCtl32.HeaderItemImageDisplay.DownArrow : ComCtl32.HeaderItemImageDisplay.UpArrow;
                }
                else
                {
                    hditem.ImageDisplay = ComCtl32.HeaderItemImageDisplay.None;
                }

                // Update header
                SendMessage(chr, ComCtl32.HeaderMessage.HDM_SETITEM, columnNumber, hditem);
            }
        }
Exemple #2
0
        public static void SetColumnDropDown(this ListView listView, int columnIndex, bool enable)
        {
            if (((columnIndex < 0) || ((columnIndex >= 0) && (listView.Columns == null))) || (columnIndex >= listView.Columns.Count))
            {
                throw new ArgumentOutOfRangeException(nameof(columnIndex));
            }

            if (listView.IsHandleCreated)
            {
                var lvc = new ComCtl32.LVCOLUMN(ComCtl32.ListViewColumMask.LVCF_FMT);
                var hr  = new HandleRef(listView, listView.Handle);
                SendMessage(hr, ComCtl32.ListViewMessage.LVM_GETCOLUMN, columnIndex, lvc);
                if (enable)
                {
                    lvc.Format |= ComCtl32.ListViewColumnFormat.LVCFMT_SPLITBUTTON;
                }
                else
                {
                    lvc.Format &= (~ComCtl32.ListViewColumnFormat.LVCFMT_SPLITBUTTON);
                }
                SendMessage(hr, ComCtl32.ListViewMessage.LVM_SETCOLUMN, columnIndex, lvc);
                listView.InvalidateHeader();
            }
        }