ListViewInsertionMark.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / ListViewInsertionMark.cs / 1 / ListViewInsertionMark.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

using System.Drawing; 
using System.Runtime.InteropServices; 
using System.Diagnostics;
 
namespace System.Windows.Forms {

    /// 
    ///  
    ///    
    ///         Encapsulates insertion-mark information 
    ///     
    /// 
    public sealed class ListViewInsertionMark 
    {	
        private ListView listView;

        private int index = 0; 
        private Color color = Color.Empty;
        private bool appearsAfterItem = false; 
 
        internal ListViewInsertionMark(ListView listView) {
            this.listView = listView; 
        }

        /// 
        ///  
        ///     Specifies whether the insertion mark appears
    	///     after the item - otherwise it appears 
    	///     before the item (the default). 
        /// 
        /// 
    	public bool AppearsAfterItem {
            get
            {
                return appearsAfterItem; 
            }
            set 
            { 
                if (appearsAfterItem != value) {
                    appearsAfterItem = value; 

                    if (listView.IsHandleCreated) {
                        UpdateListView();
                    } 
                }
            } 
        } 

    	///  
        /// 
        ///     Returns bounds of the insertion-mark.
        /// 
        /// 
    	public Rectangle Bounds {
            get 
            { 
                NativeMethods.RECT rect = new NativeMethods.RECT();
                listView.SendMessage(NativeMethods.LVM_GETINSERTMARKRECT, 0, ref rect); 
                return Rectangle.FromLTRB(rect.left, rect.top, rect.right, rect.bottom);
            }
        }
 
    	/// 
        ///  
        ///     The color of the insertion-mark. 
        /// 
        /// 
    	public Color Color {
            get
            {
                if (color.IsEmpty) { 
                    color = SafeNativeMethods.ColorFromCOLORREF((int)listView.SendMessage(NativeMethods.LVM_GETINSERTMARKCOLOR, 0, 0));
                } 
                return color; 
            }
            set 
            {
                if (color != value) {
                    color = value;
                    if (listView.IsHandleCreated) { 
                        listView.SendMessage(NativeMethods.LVM_SETINSERTMARKCOLOR, 0, SafeNativeMethods.ColorToCOLORREF(color));
                    } 
                } 
            }
        } 

    	/// 
        /// 
        ///     Item next to which the insertion-mark appears. 
        /// 
        /// 
    	public int Index { 
            get
            { 
                return index;
            }
            set
            { 
                if (index != value) {
                    index = value; 
                    if (listView.IsHandleCreated) { 
                        UpdateListView();
                    } 
                }
            }
        }
 
        /// 
        ///  
        ///     Performs a hit-test at the specified insertion point 
    	///     and returns the closest item.
        ///  
        ///
    	public int NearestIndex(Point pt)
        {
            NativeMethods.POINT point = new NativeMethods.POINT(); 
            point.x = pt.X;
            point.y = pt.Y; 
 
            NativeMethods.LVINSERTMARK lvInsertMark = new NativeMethods.LVINSERTMARK();
            UnsafeNativeMethods.SendMessage(new HandleRef(listView, listView.Handle), NativeMethods.LVM_INSERTMARKHITTEST, point, lvInsertMark); 

            return lvInsertMark.iItem;
        }
 
        internal void UpdateListView() {
            Debug.Assert(listView.IsHandleCreated, "ApplySavedState Precondition: List-view handle must be created"); 
            NativeMethods.LVINSERTMARK lvInsertMark = new NativeMethods.LVINSERTMARK(); 
            lvInsertMark.dwFlags = appearsAfterItem ? NativeMethods.LVIM_AFTER : 0;
            lvInsertMark.iItem = index; 
            UnsafeNativeMethods.SendMessage(new HandleRef(listView, listView.Handle), NativeMethods.LVM_SETINSERTMARK, 0, lvInsertMark);

            if (!color.IsEmpty) {
                listView.SendMessage(NativeMethods.LVM_SETINSERTMARKCOLOR, 0, SafeNativeMethods.ColorToCOLORREF(color)); 
            }
        } 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK